【问题标题】:Maven Build JarMaven 构建罐
【发布时间】:2019-03-21 16:55:11
【问题描述】:

我正在处理 Maven 项目,我有一个依赖于 app-core.jar 的 jar app-client.jar。所以我有一个用于 app-client.jar 的 pom.xml,并且 pom.xml 具有 app-core 的依赖项,所以我们在这个 pom.xml 中添加了 app-core 的依赖项。 现在我想在我的主项目中使用 app-client.jar。因为这个 jar 是在本地构建的,在远程存储库中不可用。所以我确实添加了 app-client 并指定了它所在的位置存储库。 如下..

<repositories>
   <repository>
       <id>repo</id>
       <releases>
           <enabled>true</enabled>
           <checksumPolicy>ignore</checksumPolicy>
       </releases>
       <snapshots>
           <enabled>false</enabled>
       </snapshots>
       <url>file://${project.basedir}/../lib</url>
   </repository>
<repositories>
<dependencies>
   <dependency>
       <groupId>com.sample</groupId>
       <artifactId>app-client</artifactId>
       <version>1.0</version>
   </dependency>
</dependencies>

我也把我的罐子放在下面 [我的模块] / [com] / [sample] /[app-client] /[1.0]/app-client-1.0.jar

当我运行 mvn clean install 时,我得到错误 app-client's pom.xml not found。并且构建失败。通常当我使用单个 jar 时它工作正常,但如果我使用与其他 jar 有依赖关系的 jar,它会失败。

那么我如何构建我的 app-client jar 和他们的 pom 以使其表现正常并部署 app-core.jar。

【问题讨论】:

标签: java maven build dependencies repository


【解决方案1】:

如果您使用mvn clean install 构建app-client.jar,那么它将安装到您的Maven 本地存储库中(.../.m2/repository)。然后同一台计算机上的任何其他项目都可以在其 pom 中引用它,而无需进一步的信息。所以不需要&lt;repositories&gt; 条目。

如果您想在同一个项目中与多人合作,请使用 Nexus/Artifactory 服务器来共享 jar。

带有 lib 文件夹和系统路径的解决方案已被弃用并会导致问题。

【讨论】:

  • 您好,很抱歉回复晚了,感谢您的更新。在我的情况下 app-client.jar 和 app-core.jar 是由其他人提供的,我没有在我的机器上构建它。在那种情况下我该怎么办?通过在 .m2 文件夹中添加该 jar 将解决我的问题?
  • 您可以使用mvn install:install-file 在您的 Maven 本地存储库中本地安装 jar。最好自己检查项目并构建它们。更好的是使用像 Nexus/Artifactory 这样的存储库管理器(如果其他工件来自您开发团队中的其他人)。
【解决方案2】:

首先,当您构建 app-client.jar 时,构建一个包含 app-core.jar 依赖项的胖 jar。

接下来将 app-client-1.0.jar 复制到本地 repo 的指定位置不起作用,将此 jar 添加到本地 repo 使用此命令mvn install:install-file -Dfile=&lt;path-to-file&gt; -DgroupId=&lt;group-id&gt; -DartifactId=&lt;artifact-id&gt; -Dversion=&lt;version&gt; -Dpackaging=&lt;packaging&gt;

【讨论】:

  • 在我的项目中,我有很多依赖项,所以我不想在给定的命令中添加列表。其次,如果我在项目的 pom 中添加 app-core.jar 依赖项,那么它也可以正常工作。但它应该为 app-client.jar 自动部署。
  • 部署 app-core 和 app-client 构建一个 fat jar。
  • 应该避免使用 fat jars 作为依赖。 Fat jars 纯粹是为了创建独立的应用程序。
猜你喜欢
  • 2013-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
  • 2019-05-17
相关资源
最近更新 更多