将本地 Maven 项目解析为 Jenkins 中的依赖项

问题描述

我有两个 maven 项目,分别称为 MainProjectDependnecyProject。我在 MainProject 项目中使用了 DependnecyProject 函数,这意味着 DependnecyProjectMainProject 项目的依赖项。

MainProject pom.xml

    <dependency>
        <groupId>testgroup</groupId>
        <artifactId>DependnecyProject</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <scope>compile</scope>
    </dependency>

在我本地的eclipse中,这完全是完美的,执行没有任何问题。

我在 Git 中拥有这两个项目,并且在 Jenkins 中创建了两个名为 MainDependency 的作业。我在 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 所建议的)。虽然如前所述这是一项糟糕的工作,但这确实奏效了。

  1. 遵循相同的配置
  2. 主要 Jenkins 工作中,我有三个准备工作
  3. 一个预备步骤是触发依赖作业
  4. 第二个 Pre-Step 是将工件从 Dependency 复制到 Main
  5. 第三步是使用“调用顶级 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 项目