【发布时间】:2021-08-05 06:44:01
【问题描述】:
我有两个 maven 项目,分别称为 MainProject 和 DependnecyProject。我在 MainProject 项目中使用 DependnecyProject 函数,这意味着 DependnecyProject 是 MainProject 项目的依赖项。
MainProject pom.xml
<dependency>
<groupId>testgroup</groupId>
<artifactId>DependnecyProject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
在我本地的eclipse中,这是完全完美的,执行没有任何问题。
我在 Git 中拥有这两个项目,并且在 Jenkins 中创建了两个作业,分别名为 Main 和 Dependency。我在 Main 作业中有一个 Pre Step,首先构建 Dependency,然后构建 Main。
Dependency 作业成功,但 Main 作业失败,说明上述依赖项 (DependnecyProject) 无法解决。这可以理解为 Jenkins 和 Maven 无法找到依赖关系。有没有办法确保 Jenkins 解决依赖关系?
或者,我尝试了另一种解决方案 在我的本地,我尝试在 MainProject POM.XML
中使用 <dependency>
<groupId>testgroup</groupId>
<artifactId>DependnecyProject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>system</scope>
<systemPath>C:\Users\cpratap\New-Workspace\Child\target\Parent-0.0.1-SNAPSHOT.jar</systemPath>
</dependency>
这在本地运行良好,但不确定如何使其在 Jenkins 中同样运行?
更新: 在 Jenkins Main 工作中,我做了以下配置(如@Ian W 所建议)。尽管如前所述,这是一个糟糕的解决方法,但这确实有效。
- 遵循相同的配置
- 在 Main Jenkins 工作中,我有三个 Pre-Steps
- 一个前置步骤是触发Dependency作业
- 第二个前置步骤是将工件从 Dependency 复制到 Main
- 第三步是使用“调用顶级 Maven 目标”将依赖项安装到本地存储库中,并在下面的目标中使用 install:install-file -Dfile= -DgroupId= -DartifactId= -Dversion= -Dpackaging=jar
这完全解决了我的问题,我可以毫无问题地运行构建并运行我的测试用例。谢谢大家的支持
【问题讨论】:
-
你能展示一下 maven 工作的样子吗?工件(jar)必须在本地存储库中可用,否则主项目构建将始终失败。我看到创建了依赖项目的jar,所以主项目可以指向它,这就是为什么在使用定义完整路径的第二种情况时它成功的原因。您是否至少在 DependencyProject Maven 作业中定义了“安装”目标?
-
通常,您使用一个 Maven 存储库管理器,您可以在其中部署您的工件。这样,没有环境会被强制安装依赖项。
-
@Seelenvirtuose 没错。但是,他定义了两个不同的作业,分别启动,这意味着主项目的构建必须以某种方式获得所有可用的依赖项才能成功,并且必须将它们安装在本地存储库中。
-
这两个作业必须都使用相同的节点/代理,而不是私有仓库。第一项工作必须使用目标“安装”发布到本地仓库。您不需要指定“范围”或“系统路径”。但最好选择合适的 repo mgr。
-
一个(糟糕的)解决方法是让提供者作业归档Artifacts。消费者作业可以使用copyartifact plugin 检索到工作区,然后使用mvn install:install-file 添加到本地存储库。
标签: java maven jenkins jenkins-pipeline maven-dependency