我有一个子项目的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
代码?
由于
答案 0 :(得分:1)
在父项目的pom的<modules/>
部分中,列出的每个模块都是包含该模块的目录的相对路径。
因此,如果您不想更改目录结构,则应该能够使用<module>subproject/trunk</module>
引用子项目的主干。
但这看起来有点笨拙。如果您正在使用聚合器/模块模式,我建议project
和subproject
都在同一个SVN存储库中。如果这不合适,那么subproject
可能不是一个模块,应该是一个依赖项或者project
作为其父工件。
答案 1 :(得分:0)
我通过在父pom中创建2 profile
来解决我的问题,第一个用所有子模块构建父应用程序,而后者只构建父应用程序。
在TeamCiTY构建配置设置中,我指定了(在其他Maven命令行参数中)仅构建父模块的配置文件,并在构建父应用程序之后。
之后我构建了我构建了所有子模块的父应用程序,然后我就能够用所有模块构建父应用程序。
我不确定这是正确的方法,但就我而言,它运作良好。