2012-08-17 63 views
6

我想将持续集成作业(Hudson)分成两个步骤。 (因为一起构建和报告的运行时间太长。) 在第一份工作中,我成功地使用“mvn package”构建了我的多模块maven项目。 然后我将我的工作区复制到另一个位置,并尝试再次使用目标“site”和/或findbugs/checkstyle/pmd来创建项目来创建项目。 但是这不起作用! Maven 无法解析我的子模块的依赖关系。 (但所有JAR文件是在其目标文件夹中可用。)多模块项目上的Maven站点无法解析依赖关系

实施例: 我的结构是这样的:

    • Ç
    • d

项目C具有作为依赖项目B.

当我建立与“MVN网站”的一切,它生成项目A和B的所有报告。但在项目C中停止,并显示错误消息“无法解析项目B的依赖关系”。 但是项目B已经建立了“mvn包”。即我可以在目标文件夹中找到项目B的JAR文件。

是否有任何方法来解决从子模块B的依赖关系没有“mvn安装”? (我不想做我的CI服务器上我担心这可能是危险与相同的代码库的其他工作。)

更新12年8月20日:

根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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <name>Foo</name> 
    <groupId>foo</groupId> 
    <artifactId>bar</artifactId> 
    <version>1.0</version> 
    <packaging>pom</packaging> 
    <modules> 
     <module>parent</module> 
    </modules> 
</project> 

父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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <name>Foo</name> 
    <groupId>foo</groupId> 
    <artifactId>parent</artifactId> 
    <version>1.0</version> 
    <packaging>pom</packaging> 
    <modules> 
     <module>../bar-a</module> 
     <module>../bar-b</module> 
     <module>../bar-c</module> 
     <module>../bar-d</module> 
    </modules> 
    [...] 
    <reporting> 
     <plugins> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>findbugs-maven-plugin</artifactId> 
       <version>2.5.1</version> 
       [...] 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-pmd-plugin</artifactId> 
       <version>2.7.1</version> 
       [...] 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-checkstyle-plugin</artifactId> 
       <version>2.9.1</version>    
       [...] 
      </plugin> 
     </plugins> 
    </reporting> 
</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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <groupId>foo</groupId> 
     <artifactId>parent</artifactId> 
     <version>1.0</version> 
     <relativePath>../parent</relativePath> 
    </parent> 
    <name>Bar B</name> 
    <artifactId>bar-b</artifactId> 
    <version>1.0</version> 
    <packaging>jar</packaging> 
    [...] 
</project> 

的C 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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <groupId>foo</groupId> 
     <artifactId>parent</artifactId> 
     <version>1.0</version> 
     <relativePath>../parent</relativePath> 
    </parent> 
    <name>Bar C</name> 
    <artifactId>bar-c</artifactId> 
    <packaging>jar</packaging> 
    [...] 
    <dependencies> 
     <dependency> 
      <groupId>foo</groupId> 
      <artifactId>bar-b</artifactId> 
      <version>1.0</version> 
     </dependency> 
    </dependencies> 
    [...] 
</project> 
+0

没有pom的很难猜测......但它听起来像一个依赖/模块没有正确配置。 mvn清洁网站应该运行没有错误。 – khmarbaise 2012-08-17 14:41:20

+0

难道一个MVN清洁包无差错运行呢? – khmarbaise 2012-08-17 20:58:14

+0

是的。 “mvn clean package”运行无误。 “mvn清洁网站”不是。稍后我会上传代码段。 – user1606528 2012-08-20 06:59:04

回答

1

我面临完全一样的 “长时间” 的问题。

解决它与您的工作方式的唯一方法是真正的mvn安装,如你所建议的那样。

但问题的确是你尝试复制你的工作区有不同的行为的方式。 你应该改为考虑CI将按照你想要的(每次提交或每个小时)频繁地进行构建和测试,但只需进行一次报告(例如每个午夜)。你将能够更快地连续编译,并在夜晚正确地编写文档和报告。

这是我们的工作方式,这是相当足够。我们使用詹金斯,但你可以触发它与每一个CI软我认为)!

@hourly : mvn clean package (or install) --> from 1 to 5 minutes to run all test on all modules 
@daily : mvn clean install site --> from 15 to 35 minutes to run all test on all modules + doc + reports + PDF reports 

您还可以使用配置文件来触发不同的行为,但这对于这样的基本使用来说太复杂了。

相关问题