在团队城市中构建具有依赖库的罐子



我正在使用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 工件。

希望它能:)

最新更新