【问题标题】:compile/provided scopes for War/Jar packagings in Maven为 Maven 中的 War/Jar 包装编译/提供范围
【发布时间】:2017-06-01 11:43:19
【问题描述】:
说到 Maven,我知道:
- 打包为jar时,最终结果中不包含compile依赖项
- 另一方面,如果包装是 war,则包含它
-
provided 依赖项永远不会包含在最终结果中,无论是 jar 还是 war 打包
例如,在 jar 包装中的 compile 范围依赖的情况下,在编译时 Maven 将简单地从本地/远程存储库中获取依赖,而不包括最终工件中的这种依赖关系。
如果这一切都是正确的,我的问题是:
1) 那么谁通常在运行时为 jar 工件提供 compile 范围的依赖项?
2) jar 中的 provided 依赖和 war 打包之间有什么区别?
【问题讨论】:
标签:
maven
maven-assembly-plugin
【解决方案1】:
1) 那么谁通常在运行时为 jar 工件提供编译范围的依赖项?
如果您将Maven assembly plugin 集成到您的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) 那么,jar 中提供的依赖项和 war 打包之间有什么区别?
在这两种情况下,都不会添加依赖项。