我正在使用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的存储库配置有关?
答案 0 :(得分:1)
TeamCity中的工件依赖关系只是您可以从一个构建传递到另一个构建的文件/存档。如果你不将它们提取到正确的文件夹中,Maven将找不到它们 - 这无论如何都不是。
Maven通过存储库交换工件(同一个词,完全不同的东西)。本地代理或存储库代理(Nexus,Artifactory等)。您需要将依赖项发布到此类存储库,以便maven能够找到它。
如果您运行依赖项(mvn install)的构建,然后在同一代理上运行依赖构建,那么更快的工作方式。这样,工件将位于代理的本地maven存储库中。您可以在teamcity中的快照依赖项中定义此限制。根本不需要工件依赖。
所以:buildA - &gt; buildB(buildA上的快照依赖关系,在同一个代理上) 现在应该做。
这只能是现在的解决方法。 maven的工件需要进入存储库。此存储库在settings.xml中的teamcity中配置,您可以传递maven构建步骤,以便它可以解析内部maven工件。
希望它有效:)