编译/提供Maven中War / Jar包装的范围

时间:2017-01-17 12:05:06

标签: maven maven-assembly-plugin

谈到Maven,我知道:

    打包 jar 时,
  1. 编译依赖项不包含在最终结果中
  2. 另一方面,如果打包 war
  3. ,则会包含它
  4. 提供依赖关系永远不会包含在 jar war 打包
  5. 的最终结果中

    例如,对于 jar 包装中的 compile 作用域依赖项,在编译时,Maven将简单地从本地/远程存储库获取依赖项,而不包括这种依赖于最终的工件。

    如果这一切都是正确的,我的问题是:

    1)那么谁经常在运行时为 jar 工件提供编译作用域依赖?

    2) jar 中的提供的依赖关系与 war 包装之间的区别是什么?

1 个答案:

答案 0 :(得分: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中提供的依赖与战争包装之间的区别是什么?

在这两种情况下,都不会添加依赖项。