在Teamcity中使用依赖库构建jar

时间:2018-03-01 16:51:04

标签: maven teamcity

我正在使用IntelliJ和Maven来构建一些Java库和应用程序。 应用程序jar依赖于在app的pom.xml声明中本地构建的库:

<dependency>
<groupId>GrpID</groupId>
<artifactId>ResultsExporterLib</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

在本地构建,一切正常,因为我在maven的.m2 \ settings.xml中定义了标记“<localRepository>”。

但是,当我尝试使用TeamCity构建管理系统构建.jar应用程序时,我在Teamcity构建日志中收到以下错误:

  

[步骤1/3] [错误] [步骤1/3]无法执行项目目标   健康检查:无法解决项目的依赖关系   GrpID:ResultsExporterLib:jar:1.0-SNAPSHOT:找不到工件   GrpID:ResultsExporterLib:jar:1.0-SNAPSHOT [14:12:05] [第1/3步] [错误]   有关错误和可能的解决方案的更多信息,请   阅读以下文章:[14:12:05] [第1/3步] [错误] [帮助1]   http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException   [14:12:05] [第1/3步]进程退出代码1

请注意,该库已经在Teamcity的“Artifact Dependencies”(针对应用程序)中进行了配置,如下所示:

"Depend on: " => package ResultsExporterLib
"Get artifacts from:" => "Latest Successful build"
"Artifacts rules: " => "+:ResultsExporterLib-1.0-SNAPSHOT-jar-with-dependencies.jar"

有关如何解决Teamcity构建错误的任何想法/建议吗? 是否与Teamcity的存储库配置有关?

1 个答案:

答案 0 :(得分:1)

TeamCity中的工件依赖关系只是您可以从一个构建传递到另一个构建的文件/存档。如果你不将它们提取到正确的文件夹中,Maven将找不到它们 - 这无论如何都不是。

Maven通过存储库交换工件(同一个词,完全不同的东西)。本地代理或存储库代理(Nexus,Artifactory等)。您需要将依赖项发布到此类存储库,以便maven能够找到它。

如果您运行依赖项(mvn install)的构建,然后在同一代理上运行依赖构建,那么更快的工作方式。这样,工件将位于代理的本地maven存储库中。您可以在teamcity中的快照依赖项中定义此限制。根本不需要工件依赖。

所以:buildA - &gt; buildB(buildA上的快照依赖关系,在同一个代理上) 现在应该做。

这只能是现在的解决方法。 maven的工件需要进入存储库。此存储库在settings.xml中的teamcity中配置,您可以传递maven构建步骤,以便它可以解析内部maven工件。

希望它有效:)