说到Maven,我知道:
- 当打包为 JAR 时,最终结果中不包含编译依赖项
- 另一方面,如果包装是战争,它就会被包括在内
- 提供的依赖项永远不会包含在最终结果中,无论是 JAR 还是 WAR 打包
jar 打包中的编译范围依赖项的情况下,在编译时,Maven 将简单地从本地/远程存储库获取依赖项,而不会在最终工件中包含此类依赖项。
如果所有这些都是正确的,我的问题是:
1) 那么谁通常在运行时为 jar 工件提供编译范围的依赖项?
2)那么罐子里提供的依赖关系和战争包装有什么区别?
1) 那么谁通常在运行时为 jar 工件提供编译范围的依赖项?
如果将 Maven 程序集插件集成到 pom.xml
中,则具有范围 compile
的依赖项将与项目工件一起打包到程序集中。不会添加具有作用域 provided
的依赖项:
下面是一个示例。它假定有一个特定的程序集描述符(projectAssembly.xml
),而不是默认的。
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<finalName>${artifactId}-${version}-distribution</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/assembly/projectAssembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
2)那么罐子里提供的依赖关系和战争包装有什么区别?
在这两种情况下,都不会添加依赖项。