【问题标题】:How to configure Maven build for Java project with external dependencies?如何为具有外部依赖项的 Java 项目配置 Maven 构建?
【发布时间】:2013-02-04 04:03:15
【问题描述】:

我正在尝试创建用于使用 maven 构建的自动化解决方案。我的愿景是构建一个 Maven,它从我的项目创建 JAR 文件,然后将所有依赖项作为 JAR 复制到“目标”文件夹中的某个子目录。

我不想使用 Shade 或 Assembly(所以我不想提取其他 JAR 的内容并将其包含在一个“超级 JAR”中,因为项目更复杂,并且当我包含时它会中断一个文件中的所有 JAR)。

我怎样才能做这样的构建 POM?

【问题讨论】:

  • 当你进行 maven 构建时,所有的依赖都会被复制到 target/lib。
  • @AjayGeorge 这在很大程度上取决于<packaging>.. OP 表示他构建了一个 JAR,因此他的target/lib 中将没有任何内容。 @Miroslav 我很好奇你为什么不想使用汇编插件?
  • @AndersR.Bystrup 您的意思是构建一个单一的超级jar 文件?这将是最好的,但我一直在为覆盖/跳过的文件而苦苦挣扎(就目前而言,该项目有 68 个依赖于它的外部 JAR)——即使 Shade 也没有帮助......所以我最终得到了一个搞砸的 JAR 文件无法正确开始......正如我在接受答案下方的评论中所说,我正在为 Maven 配置而苦苦挣扎。
  • 是的,我会这样做,但@IgorKonoplyanko 的回答要好得多,所以我也学到了一些东西:-)

标签: java maven build jar


【解决方案1】:

我认为这里没有任何问题。只需使用<packaging>jar</packaging> 创建 maven pom.xml 默认情况下,它不应将所有依赖库打包到您的 jar 中。

<plugin>
  <artifactId>maven-dependency-plugin</artifactId>
  <executions>
    <execution>
      <phase>install</phase>
      <goals>
        <goal>copy-dependencies</goal>
      </goals>
      <configuration>
        <outputDirectory>${project.build.directory}/lib</outputDirectory>
      </configuration>
    </execution>
  </executions>
</plugin>

【讨论】:

  • 没问题,我只是(很长时间)没能掌握 Maven 配置,因为其他工作,我没有时间好好研究它。 :-( 谢谢,这基本上是答案。现在我只需要弄清楚如何在同一步骤中添加清单,但我想我可以处理。谢谢!
  • 我可以建议对新手最有价值的提示 - 尝试“mvn archetype:generate”。在那里你可以为不同类型的项目准备好 maven 设置。
【解决方案2】:

与你最新的评论相关,使用这个插件在manifest中添加主类:

        <plugin>
            <!-- Build an executable JAR -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>com.test.YourMainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

【讨论】:

  • 谢谢,我已经想通了。而且,由于 java -jar 以某种方式覆盖(?)java -cp,我最终还是使用了 java -cp "project-jarfile.jar;lib/*" mainClass。
【解决方案3】:

您可以使用 maven-assembly-plugin 从目录中的一系列其他文件中创建一个 .zip 文件。我已使用此方法为项目创建分发 zip 文件。 maven-assembly-plugin documentation 中有几个示例。

【讨论】:

  • 感谢您的回答,但事实并非如此。组装插件是该过程的最后一步,创建分发包。但我只需要先将依赖项收集到一个目录中。
猜你喜欢
  • 1970-01-01
  • 2012-08-20
  • 2012-01-06
  • 2013-05-11
  • 2023-03-13
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多