Maven的新功能:使用阴影插件和第三方罐子

mak*_*chi 2 maven-2 jar maven

这应该很简单,但我无法绕过它.我需要使用第三方罐子创建一个uberjar.我已经按照这些说明操作了:包含一个非Mavenized依赖项,以便它与maven-shade-plugin一起使用并将它们添加到本地存储库中.但现在呢?每个Maven教程/示例都有点阴暗(双关语),我只是不知道如何正确编辑.pom文件以使其工作.

此外,我对整体阴影"插件"感到困惑.我的意思是,我遵循了基本的Maven教程,它一切都很好,花花公子.但是当我查看树荫插件页面时,除了源代码之外我找不到它下载.我的意思是,这不是一个插件吗?我不应该下载二进制文件并以某种方式将其安装到Maven中吗?

对于极端的noobish问题感到抱歉,但不用说,我知道对Maven的蹲坐.

Cha*_*ick 5

要创建阴影(uber)jar,您只需要声明您的阴影插件pom.xml.

关于阴影插件的安装,只需在plugins您的部分中声明它即可pom.xml.Maven插件不是手动安装的,而是由Maven自动下载(如果尚未下载;就像依赖项一样),存储在本地存储库中,并在项目需要时使用.

至于使用它,就像其他插件一样,pom.xml通过添加一个<plugin>满足您配置需求的元素来声明它.这个插件什么都不做(有些做,有些不做) - 你必须指定要执行的"目标"(想想"类的方法"),以及"阶段"(想想构建过程的"步骤") ).除非您有奇怪的需求,否则请在"包"阶段指定"阴影"目标(见下文).

有关更多配置的可能性,请参阅阴影使用页面及其示例(尤其是选择超级jar的内容).这是一个简单的例子,当你运行时mvn package,用target/uber jar 替换目录中的原始jar.它只包含运行时依赖项,而不是测试时使用的依赖项(请注意<scope>junit依赖项的元素,它不包含在uber jar中).

<project>
  <groupId>com.sample</groupId>
  <artifactId>test</artifactId>
  <version>1.0</version>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>1.5</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
      <groupId>com.sample</groupId>
      <artifactId>test-core</artifactId>
      <version>1.0</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)