使用jenkins构建maven,而不是从本地.m2存储库中获取jar

时间:2017-02-10 12:55:15

标签: java maven jenkins

我有一个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是试图在自己的.m2存储库中找到jar)
  4. 更改了Jenkins"全局工具配置"从手动(我手动设置maven home)到自动安装(版本3.3.9)的Maven安装。没有运气,问题依然存在。
  5. 未对maven settings.xml进行任何更改。
  6. 如果我尝试使用mvn clean install在没有Jenkins的情况下手动构建项目A,则会成功构建。
  7. 所以,只有詹金斯,我无法建立这个项目。

    这是我的项目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>
    

1 个答案:

答案 0 :(得分:2)

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

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

  1. 在项目配置中,选中private repository option。这将为每个jenkins执行程序创建单独的存储库。如果你在jenkins master中的执行者对A和B不同,你将看不到你的jar文件。
  2. 在您的设置中,您无法添加任何从属设备。所有构建应该在master上运行。我希望你不是在不同的奴隶中运行它们。
  3. 我假设你已经运行了你的项目&#39; B&#39;使用mvn install。在您的项目中&#39; A&#39;使用-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文件。
  7. 让我知道它是怎么回事。

    由于您现在已在工作流程中添加了工件,并且未遇到插件问题,请在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>
    

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