2014-10-08 102 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