TeamCity,Maven Build未找到子模块

时间:2014-10-08 09:54:17

标签: maven svn teamcity pom.xml

我有一个子项目的Maven项目,当我在IDEA(IntelliJ IDEA)的父项目上运行我的安装任务时,一切正常, maven 解析子模块。

我的项目在颠覆上版本化,这是文件系统结构:

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

我在 teamcity 服务器上通过svn网址创建项目及其子项目。

当我在父项目上运行Build时,它失败并返回以下错误:

[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>

Child 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)中添加了一个新参数,并将其传递给parent标签内的relativePath。

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

我认为我的子项目POM无法解析我放在<relativePath标记内的属性。

是否可以将属性传递给relativePath代码?


由于

2 个答案:

答案 0 :(得分:1)

在父项目的pom的<modules/>部分中,列出的每个模块都是包含该模块的目录的相对路径。

因此,如果您不想更改目录结构,则应该能够使用<module>subproject/trunk</module>引用子项目的主干。

但这看起来有点笨拙。如果您正在使用聚合器/模块模式,我建议projectsubproject都在同一个SVN存储库中。如果这不合适,那么subproject可能不是一个模块,应该是一个依赖项或者project作为其父工件。

答案 1 :(得分:0)

我通过在父pom中创建2 profile来解决我的问题,第一个用所有子模块构建父应用程序,而后者只构建父应用程序。

在TeamCiTY构建配置设置中,我指定了(在其他Maven命令行参数中)仅构建父模块的配置文件,并在构建父应用程序之后。

之后我构建了我构建了所有子模块的父应用程序,然后我就能够用所有模块构建父应用程序。

我不确定这是正确的方法,但就我而言,它运作良好。