2014-10-08 106 views
0

我有一個子項目的Maven項目,當我從IDEA(IntelliJ IDEA)的父項目上運行我的安裝任務時,一切正常,並且maven解決子模塊。TeamCity,Maven構建未找到子模塊

我的項目是版本上顛覆,這是文件系統結構:

project 
|--pom.xml 
|--subproject 
    | 
    |-- branches 
    |-- tags 
    |-- trunk (here there is my subproject source, also pom.xml file) 

我已經創建了具有子項目的項目,從SVN URL,在的TeamCity服務器。

當我運行生成的父項目就失敗並返回我下面的錯誤:

[Step 1/1] Error reading Maven project: Some problems were encountered while processing the POMs: 
[ERROR] Child module /opt/buildAgent/work/ee114e0c77ee2c44/subproject of /opt/buildAgent/work/ee114e0c77ee2c44/pom.xml does not exist @ 

我怎麼能到父項目建造的地方找到孩子模塊說呢?

是否還有其他問題?

父POM:

<?xml version="1.0" encoding="UTF-8"?> 
<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>it.company.project</groupId> 
    <artifactId>MyProject</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <name>MyProject</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> 
    <modules> 
    <module>Foo</module> 
    </modules> 
</project> 

兒童POM:

<?xml version="1.0"?> 
<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> 

    <parent> 
     <groupId>it.company.project</groupId> 
     <artifactId>MyProject</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </parent> 

    <groupId>it.company.subproject</groupId> 
    <artifactId>subproject</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>subproject</name> 
    <url>http://maven.apache.org</url> 

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

    <build> 
     <resources> 
      <resource> 
       <directory>src/main/java</directory> 
       <includes> 
        <include>**/*.java</include> 
       </includes> 
      </resource> 
     </resources> 
    </build> 
</project> 

編輯: 我增加了新的參數(pathSubproject)到我父母的pom.xml,所以當我運行父級構建它跳過了以前的錯誤,但現在它在嘗試解決子項目上的父級依賴性時崩潰。所以我也在子項目(parentPath)中添加了一個新參數,並將其傳遞給父標籤內的relativePath。

Non-resolvable parent POM: Could not find artifact it.company.project:MyProject:pom:1.0-SNAPSHOT and 'parent.relativePath' 

我認爲我的子項目POM沒有解決我放入<relativePath標記的屬性。

是否可以將一個屬性傳遞給relativePath標記?


感謝

回答

0

我解決了我的問題,在我的父pom中創建了2 profile,第一個構建了包含所有子模塊的父應用程序,而後者僅構建了父應用程序。

在TeamCiTY構建配置設置我指定(附加的Maven命令行參數)配置文件,只生成父模塊,並在構建父應用程序後。

之後,我建立了父應用程序,我建立了所有的子模塊,然後我能夠用所有模塊構建父應用程序。

我不確定這是否正確,但在我的情況下它運行良好。

1

在你的父項目的POM的<modules/>部分,列出的每個模塊包含該模塊的目錄的相對路徑。

所以如果你不想改變目錄結構,你應該能夠使用<module>subproject/trunk</module>來引用你的子項目的主幹。

雖然這看起來有點笨拙。如果您使用聚合器/模塊模式,我會建議projectsubproject都在同一個SVN存儲庫中。如果這不合適,那麼你的subproject可能不是一個真正的模塊,應該是一個依賴或者有project作爲它的父物件。

+0

我的項目和子項目都在同一個SVN倉庫中,倉庫的結構如我的問題所示。我更喜歡將我的主要開發線放到其他分支行,因此對於每個子項目我創建了3個子文件夾:主幹,標籤和分支。 – PapaSmurf 2014-10-09 12:19:33

+1

好的,然後使用子項目/樹幹模塊應該工作。你嘗試過嗎? – 2014-10-09 12:23:27

+0

我將新參數(pathSubproject)添加到我的父pom.xml中,因此當我運行父構建時,它跳過了以前的錯誤,但現在在嘗試解析子項目上的父依賴項時崩潰了。這是錯誤'項目it.company.project:子項目:3.0(/opt/buildAgent/work/ee114e0c77ee2c44/subproject/trunk/pom.xml)有1個錯誤' – PapaSmurf 2014-10-09 15:14:49