【问题标题】:New at Maven: Using the shade plugin and 3rd party jarsMaven 的新功能:使用 shade 插件和 3rd 方 jars
【发布时间】:2011-06-17 14:16:04
【问题描述】:

这应该很简单,但我无法解决它。我需要使用 3rd 方 jars 创建一个 uberjar。我已经按照以下说明进行操作:Including a non-Mavenized dependency so it works with maven-shade-plugin 并将它们添加到本地存储库中。但现在呢?每个 Maven 教程/示例都有点阴暗(双关语),我只是不知道如何正确编辑 .pom 文件以使其工作。

此外,我对整体的阴影“插件”感到困惑。我的意思是,我遵循了基本的 Maven 教程,一切顺利。但是当我查看shade插件页面时,除了源代码之外,我找不到它可以下载。我的意思是,它不是一个插件吗?我不应该下载二进制文件并以某种方式将其安装到 Maven 中吗?

很抱歉这个极端的菜鸟问题,但不用说,我对 Maven 深有体会。

【问题讨论】:

    标签: maven-2 maven jar


    【解决方案1】:

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

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

    至于使用它,就像其他插件一样,在您的 pom.xml 中声明它,方法是在您的配置需求中添加 <plugin> 元素。这个插件不会自动执行任何操作(有些会,有些不会) - 你必须指定要执行的“目标”(想想“类的方法”),以及在哪个“阶段”(想想构建过程的“步骤” )。除非您有奇怪的需求,否则请在“打包”阶段指定“阴影”目标(见下文)。

    有关更多配置可能性,请参阅shade usage 页面及其示例(尤其是selecting contents for uber jar)。这是一个简单的示例,当您运行mvn package 时,将target/ 目录中的原始jar 替换为超级jar。它仅包括运行时依赖项,而不包括在测试时使用的那些(注意 junit 依赖项的 <scope> 元素,它不包含在 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>
    

    【讨论】:

      【解决方案2】:

      如果您已经下载了二进制文件并将它们安装到本地 Maven 存储库中,那么剩下的就是在 POM 中将它们声明为依赖项。如果在 POM 中也声明了 shade 插件,一个简单的“mvn install”应该在目标目录中生成一个独立的 JAR。

      【讨论】:

        猜你喜欢
        • 2015-08-01
        • 2017-08-27
        • 2015-08-20
        • 1970-01-01
        • 2015-02-05
        • 1970-01-01
        • 1970-01-01
        • 2014-09-01
        • 2014-07-23
        相关资源
        最近更新 更多