在 Teamcity 中使用依赖库构建 jar
Building jar with dependent libraries in Teamcity
我正在使用 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 构建日志中收到以下错误:
[Step 1/3] [ERROR] [Step 1/3] Failed to execute goal on project
Healthcheck: Could not resolve dependencies for project
GrpID:ResultsExporterLib:jar:1.0-SNAPSHOT: Could not find artifact
GrpID:ResultsExporterLib:jar:1.0-SNAPSHOT [14:12:05][Step 1/3] [ERROR]
For more information about the errors and possible solutions, please
read the following articles: [14:12:05][Step 1/3] [ERROR] [Help 1]
http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
[14:12:05][Step 1/3] Process exited with code 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 的存储库配置有关?
TeamCity 中的工件依赖项只是您可以从一个构建传递到另一个构建的文件/存档。如果您不将它们解压缩到正确的文件夹,Maven 将找不到它们 - 无论如何这不是主意。
Maven 通过存储库交换工件(同一个词,完全不同的东西)。本地代理或存储库代理(Nexus、Artifactory 等)。您需要将您的依赖项发布到这样的存储库,以便让 Maven 找到它。
如果您 运行 构建您的依赖项 (mvn install),然后在同一个代理上构建依赖项,那么工作速度会更快。这样,工件将位于代理的本地 Maven 存储库中。您可以在 teamcity 中的快照依赖项中定义此限制。完全不需要工件依赖项。
所以:buildA -> buildB(快照依赖于 buildA,在同一个代理上)
现在应该做。
这只是目前的解决方法。 Maven 的工件需要进入存储库。此存储库在 settings.xml 中的 teamcity 中配置,您可以传递 maven 构建步骤,以便它可以解析 in-house maven 工件。
希望有用:)
我正在使用 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 构建日志中收到以下错误:
[Step 1/3] [ERROR] [Step 1/3] Failed to execute goal on project Healthcheck: Could not resolve dependencies for project GrpID:ResultsExporterLib:jar:1.0-SNAPSHOT: Could not find artifact GrpID:ResultsExporterLib:jar:1.0-SNAPSHOT [14:12:05][Step 1/3] [ERROR] For more information about the errors and possible solutions, please read the following articles: [14:12:05][Step 1/3] [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException [14:12:05][Step 1/3] Process exited with code 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 的存储库配置有关?
TeamCity 中的工件依赖项只是您可以从一个构建传递到另一个构建的文件/存档。如果您不将它们解压缩到正确的文件夹,Maven 将找不到它们 - 无论如何这不是主意。
Maven 通过存储库交换工件(同一个词,完全不同的东西)。本地代理或存储库代理(Nexus、Artifactory 等)。您需要将您的依赖项发布到这样的存储库,以便让 Maven 找到它。
如果您 运行 构建您的依赖项 (mvn install),然后在同一个代理上构建依赖项,那么工作速度会更快。这样,工件将位于代理的本地 Maven 存储库中。您可以在 teamcity 中的快照依赖项中定义此限制。完全不需要工件依赖项。
所以:buildA -> buildB(快照依赖于 buildA,在同一个代理上) 现在应该做。
这只是目前的解决方法。 Maven 的工件需要进入存储库。此存储库在 settings.xml 中的 teamcity 中配置,您可以传递 maven 构建步骤,以便它可以解析 in-house maven 工件。
希望有用:)