我正在使用IntelliJ和Maven来构建一些Java库和应用程序。 应用程序 jar 依赖于在应用程序的 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:结果导出器库:jar:1.0-快照 [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 的"工件依赖项"(针对应用程序)中配置,如下所示:
"Depend on: " => package ResultsExporterLib
"Get artifacts from:" => "Latest Successful build"
"Artifacts rules: " => "+:ResultsExporterLib-1.0-SNAPSHOT-jar-with-dependencies.jar"
关于如何解决Teamcity构建错误的任何想法/建议? 这与Teamcity的存储库配置有关吗?
TeamCity 中的工件依赖项只是您可以从一个构建传递到另一个构建的文件/存档。如果您不将它们解压缩到正确的文件夹,Maven 将无法找到它们 - 无论如何,这不是这个想法。
Maven通过存储库交换工件(相同的词,完全不同的东西)。本地代理或存储库代理(Nexus,Artifactory等)。您需要将依赖项发布到这样的存储库,以便 maven 找到它。
如果您运行依赖项的构建(mvn 安装),然后在同一代理上运行依赖构建,则工作速度更快。这样,工件将位于代理的本地 maven 存储库中。您可以在团队城市的快照依赖项中定义此限制。根本不需要项目依赖项。
所以:buildA -> buildB(快照依赖于构建 A,在同一代理上) 现在应该做。
这目前只能是一种解决方法。maven 的工件需要进入存储库。此存储库在 teamcity 的设置中配置.xml您可以传递 maven 构建步骤,以便它可以解析内部 maven 工件。
希望它能:)