问题描述
我有两个 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,首先构建 依赖项,然后构建 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 所建议的)。虽然如前所述这是一项糟糕的工作,但这确实奏效了。
- 遵循相同的配置
- 在主要 Jenkins 工作中,我有三个准备工作
- 一个预备步骤是触发依赖作业
- 第二个 Pre-Step 是将工件从 Dependency 复制到 Main
- 第三步是使用“调用顶级 Maven 目标”将依赖项安装到本地存储库中,并在下面的目标中使用 安装:安装文件 -Dfile= -DgroupId= -DartifactId= -Dversion= -Dpackaging=jar
这完全解决了我的问题,我可以毫无问题地运行构建和测试用例。谢谢大家的支持
解决方法
如果你将一个 jar 和你的源代码一起放在 vcs 中,那么这样做的方法是在你的 pom.xml 文件中声明你的存储库,并使用你的 jar 作为依赖项。
例如,如果您将 jar 放在项目的 lib 目录中,这就是您在项目中使用它的方式。假设你的 jar 名称是 hello-world-library-1.0-SNAPSHOT.jar,你希望你的 groupId 是 com.local ,你的 artifactId hello-world-library-local和版本是1.0-SNAPSHOT
首先,您应该在项目目录中创建本地存储库,并将您的 jar 放在那里。
mvn \
deploy:deploy-file \
-Durl=file:./lib \
-Dfile=hello-world-library-1.0-SNAPSHOT.jar \
-DgroupId=com.local \
-DartifactId=hello-world-library-local \
-Dpackaging=jar \
-Dversion=1.0-SNAPSHOT
然后将本地存储库添加到您的 pom.xml
<repositories>
<repository>
<id>localrep</id>
<name>local repository</name>
<url>file:${project.basedir}/lib</url>
</repository>
</repositories>
然后,将您的 jar 作为依赖项添加到 pom.xml 文件中的依赖项块
<dependencies>
<dependency>
<groupId>com.local</groupId>
<artifactId>hello-world-library-local</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
如果您想将 jar 与源代码一起分发,并且不想每次在新机器上构建时都弄乱项目的设置,则可以使用它。
但不建议在企业环境中使用。你永远将存储库块放在你的 pom.xml 中,除非那是你的玩具项目,或者你真的知道你在做什么
如果您不想每次都将 jar 复制到项目目录中,则应考虑将项目转换为单个多模块 maven 项目。