Maven依赖范围的定义和作用‌+将依赖打入模块jar包

Maven依赖范围的定义和作用‌

Maven的依赖范围用于控制依赖与编译、测试和运行三种classpath的关系。不同的依赖范围决定了依赖在项目构建的不同阶段是否有效。Maven主要有以下几种依赖范围:

‌‌compile‌:编译依赖范围。默认情况下使用该依赖范围,对于编译、测试和运行三种classpath都有效。适用于在所有阶段都需要使用的依赖,例如‌spring-core。
‌‌provided‌:已提供依赖范围。编译和测试时需要,但在运行时由外部环境提供。适用于由容器提供的库,例如servlet-api。
‌‌runtime‌:运行时依赖范围。编译时不需要,但在运行时需要。适用于JDBC驱动程序等库。
‌‌test‌:测试依赖范围。仅在测试阶段需要,不会包含在最终的构建包中。适用于JUnit等测试框架。
‌‌system‌:系统依赖范围。与provided类似,但需要在本地文件系统中指定路径。通常不推荐使用,因为它与系统绑定,可能导致构建不可移植。

每种依赖范围的具体应用场景和效果

‌compile‌:
    适用于所有阶段,例如spring-core在编译、测试和运行时都需要使用。
    默认情况下使用该依赖范围。

‌provided‌:
    适用于由容器提供的库,例如servlet-api。在编译和测试时需要,但在运行时由Tomcat等容器提供,因此不需要重复引入。
    例如,在编译和测试时需要servlet-api,但在运行时由Tomcat提供。

‌runtime‌:
    适用于JDBC驱动程序等库。编译时不需要,但在运行时需要。
    例如,JDBC驱动程序在编译主代码时不需要,但在执行测试或运行项目时需要。

‌test‌:
    仅在测试阶段需要,不会包含在最终的构建包中。
    例如,JUnit等测试框架仅在测试时需要。

‌system‌:
    与provided类似,但需要在本地文件系统中指定路径。通常不推荐使用,因为它与系统绑定,可能导致构建不可移植。
    例如,某些特定平台的本地库可能需要使用system范围。

将依赖打入模块jar包

<plugins>
              <!--主要用于将 Maven 项目打包成可执行的程序或分发包 -->
              <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-assembly-plugin</artifactId>
                  <version>3.3.0</version>
                  <configuration>
                      <descriptorRefs>
                          <!--预定义的描述符格式-->
                          <descriptorRef>jar-with-dependencies</descriptorRef>
                      </descriptorRefs>
                  </configuration>
                  <executions>
                      <execution>
                          <id>make-assembly</id><!--名字任意 -->
                          <phase>package</phase><!-- 绑定到package生命周期阶段上 -->
                          <goals>
                              <goal>single</goal><!-- 只运行一次 -->
                          </goals>
                      </execution>
                  </executions>
              </plugin>

注意:依赖的jar包在pom中配置的作用范围需要为默认‌compile‌

上一篇:MySQL的SQL书写顺序和执行顺序


下一篇:19.useSessionStorage