TeamCity,Maven构建未找到子模块
我有一个子项目的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
标记?
感谢
我解决了我的问题,在我的父pom中创建了2 profile
,第一个构建了包含所有子模块的父应用程序,而后者仅构建了父应用程序。
在TeamCiTY构建配置设置我指定(附加的Maven命令行参数)配置文件,只生成父模块,并在构建父应用程序后。
之后,我建立了父应用程序,我建立了所有的子模块,然后我能够用所有模块构建父应用程序。
我不确定这是否正确,但在我的情况下它运行良好。
在你的父项目的POM的<modules/>
部分,列出的每个模块包含该模块的目录的相对路径。
所以如果你不想改变目录结构,你应该能够使用<module>subproject/trunk</module>
来引用你的子项目的主干。
虽然这看起来有点笨拙。如果您使用聚合器/模块模式,我会建议project
和subproject
都在同一个SVN存储库中。如果这不合适,那么你的subproject
可能不是一个真正的模块,应该是一个依赖或者有project
作为它的父物件。
我的项目和子项目都在同一个SVN仓库中,仓库的结构如我的问题所示。我更喜欢将我的主要开发线放到其他分支行,因此对于每个子项目我创建了3个子文件夹:主干,标签和分支。 – PapaSmurf 2014-10-09 12:19:33
好的,然后使用子项目/树干模块应该工作。你尝试过吗? – 2014-10-09 12:23:27
我将新参数(pathSubproject)添加到我的父pom.xml中,因此当我运行父构建时,它跳过了以前的错误,但现在在尝试解析子项目上的父依赖项时崩溃了。这是错误'项目it.company.project:子项目:3.0(/opt/buildAgent/work/ee114e0c77ee2c44/subproject/trunk/pom.xml)有1个错误' – PapaSmurf 2014-10-09 15:14:49