繁体   English   中英

使用 jenkins 构建 maven 没有从本地 .m2 存储库中获取 jar

[英]maven build with jenkins not picking up jar from local .m2 repository

我有一个 jenkins 工作来构建我的 maven 项目(比如项目 A),它依赖于另一个本地项目(比如项目 B)创建的 jar。 该 jar 存在于我的本地 .m2 存储库中,但 Jenkins 未能在本地存储库中找到它,而是在中央 ( https://repo.maven.apache.org/maven2 ) 中搜索它,显然它找不到,因此我的工作失败了。 在此处发布此问题之前,我已执行以下检查:

  1. 依赖项目和独立项目中的工件版本匹配
  2. 我机器的本地 .m2 存储库具有所需的依赖 jar 版本
  3. 编写了一个单独的 jenkins 作业来构建项目 B,它构建成功并且 jar 存在于 Jenkins home 的 .m2 存储库中,以及 /var/lib/jenkins/.m2 的路径(如果 jenkins 试图找到jar 在其自己的 .m2 存储库中)
  4. 将 Maven 安装的 Jenkins“全局工具配置”从手动(我手动设置了 Maven 主页)更改为自动安装(版本 3.3.9)。 运气不好,问题还是一样。
  5. 没有对 maven settings.xml 进行任何更改。
  6. 如果我尝试使用mvn clean install没有 Jenkins 的情况下手动构建项目 A,它会成功构建。

所以,只有 Jenkins 我无法构建项目。

这是我的项目 A 的 POM

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.akamai</groupId>
    <artifactId>cobra-tracer-api</artifactId>
    <version>1.0.2</version>
    <packaging>war</packaging>

    <name>cobra-tracer</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <build>
        <finalName>cobra-tracer</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        //some dependencies here
        <dependency>
            <groupId>com.akamai.aps</groupId>
            <artifactId>logger-service</artifactId>
            <version>0.0.2</version>
        </dependency>

    </dependencies>
</project>

项目 B 的 POM 是

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.akamai.aps</groupId>
    <artifactId>logger-service</artifactId>
    <version>0.0.3</version>
    <packaging>jar</packaging>

    <name>logger-service</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

您将 jenkins 与 maven 集成的方式不正确。 您必须使用artifactorynexus ,它们都有足够好用的免费版本。 您构建您的项目 B 并将它们部署到上面的存储库管理器,您的项目 A 从存储库管理器下载它。

对于您的具体问题,请检查

  1. 在您的项目配置中,已选中私有存储库选项 这将为每个 jenkins 执行程序创建单独的存储库。 如果你在 jenkins master 中的 executor 对于 A 和 B 是不同的,你将看不到你的 jar 文件。
  2. 在您的设置中,您不能添加任何从站。 所有构建都应该在 master 上运行。 我希望你不要在单独的奴隶中运行它们。
  3. 我假设您已经使用mvn install运行了您的项目“B”。 在您的项目“A”中,使用 -U 标志运行 maven 命令。 mvn -U install
  4. 查看您的 jenkins 作业命令行。 确保它没有使用 -s 标志运行 maven。 这是一种传递不同setting.xml 的方法。 示例mvn -s /home/jenkins/setting.xml install 有一个选项可以在 jenkins 项目配置中定义不同的设置文件。
  5. 看看你的maven安装路径。 它应该在 jenkins-workspace/tools 位置。 检查 /conf 中的 setting.xml。 确保未定义本地存储库。 如果 jenkins 正在安装它,则不应设置它。
  6. 检查您的 .m2 文件夹中是否存在具有不同 repo 路径的 setting.xml 文件。

让我知道事情的后续。


由于您现在已经在工作流程中添加了 artifactory 并且面临 plugin not found 问题,请在 settings.xml 中添加以下内容

<mirrors>
  <mirror>
   <mirrorOf>*</mirrorOf>
   <name>remote-repos</name>
   <url>http://<artifactory-ip>:<artifactory-port>/artifactory/repo</url>
   <id>remote-repos</id>
  </mirror>
</mirrors>

<pluginRepositories>
  <pluginRepository>
   <snapshots>
     <enabled>false</enabled>
    </snapshots>
   <id>central</id>
   <name>plugins-release</name>
   <url>http://<artifactory-id>:<artifactory-port>/artifactory/plugins-release</url>
  </pluginRepository>
 <pluginRepository>
   <snapshots />
     <id>snapshots</id>
    <name>plugins-snapshot</name>
    <url>http://<artifactory-id>:<artifactory-port>/artifactory/plugins-snapshot</url>
 </pluginRepository>
</pluginRepositories>

我假设您已经添加了存储库标签。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM