我有一个多模块maven应用程序,我们需要通过Jenkins构建。 项目结构如下:
a.xml
<artifactId>parent-1</artifactId>
<modules>
<module>lookup-1</module>
<module>lookup-2</module>
</modules>
lookup-1.xml
<artifactId>lookup-1</artifactId>
<parent>
<groupId>com.lookup</groupId>
<artifactId>parent-1</artifactId>
<version>1.0.1-SNAPSHOT</version>
</parent>
<name>lookup-1</name>
lookup-2.xml
<artifactId>lookup-2</artifactId>
<parent>
<groupId>com.lookup</groupId>
<artifactId>parent-1</artifactId>
<version>1.0.1-SNAPSHOT</version>
</parent>
<name>lookup-2</name>
现在, mvn clean install -f a.xml工作正常。为此,我创建了一个Jenkins工作。 现在,和a.xml一样,我有另一个带有b.xml的项目。除了不同的ID之外,b.xml具有与a.xml相同的代码。所以,我为b.xml创建了另一个jenkins作业。 两个工作都很好。但是,现在我想根据我们在Git中提交的项目,从单个Jenkins作业构建这两个项目。因为,我希望有一个新项目(pom.xml),我想在模块标签下放置a和b。像这样:
pom.xml
<name>combined_project</name>
<artifactId>combined_project</artifactId>
<modules>
<module>a</module>
<module>b</module>
</modules>
a.xml
<artifactId>parent-1</artifactId>
<name>a</name>
<parent>
<artifactId>combined_project</artifactId>
</parent>
<modules>
<module>lookup-1</module>
<module>lookup-2</module>
</modules>
但是,它不适合我。我在maven中遇到异常:
Child module D:\....\a of D:\....\pom.xml does not exist
Maven无法找到子模块。 我遵循了项目结构:
project
|_ lookup-1
|_ lookup-1.xml
|_ lookup-2
|_ lookup-2.xml
|_ a.xml
|_ b.xml
|_ pom.xml
任何提示?
答案 0 :(得分:0)
a.xml
有2个子模块lookup-1
和lookup-2
。默认情况下,maven正在寻找嵌套映射中的子模块。因此,您需要具有以下目录结构:
<parent>
|
+- a/pom.xml
| |
| +- lookup-1/pom.xml
| |
| +- lookup-2/pom.xml
|
+- b/pom.xml
|
+- pom.xml
替代方法是将父级更改为
<name>combined_project</name>
<artifactId>combined_project</artifactId>
<modules>
<module>a</module>
<module>b</module>
<module>lookup-1</module>
<module>lookup-2</module>
</modules>
答案 1 :(得分:0)
Maven遵循项目结构,每个<module>
将包含pom.xml
文件。正如您在命令行中明确声明的那样,该文件将被选为该项目的pom.xml
。但是,对于列出的每个子模块,maven将为每个子模块搜索名为"pom.xml"
的确切文件。
从提供的文件夹结构中,可以推断出a.xml在命令行中明确指定时可以充当pom文件但它不能充当模块,因为它没有pom.xml专用文件夹。
maven项目一般具有以下结构:
- 原型-ID(文件夹)
- pom.xml(包装:pom)(带一个模块module-artifact-id)
- 模块伪影-ID(文件夹)
- 的pom.xml
如果您尝试仅构建已更新的模块,则最近未签入的模块将不会成为新创建的存档的一部分。但是,如果你仍然想要出于一些“特殊”的原因。您可能正在寻找以下方法:
(我不推荐它 - 因为它很乱并违反惯例) 在一个项目中有两个子模块,并且还有两个.xml文件(在命令行中指定pom文件)。在一个xml文件中,可以说“a.xml”“module-1”将被指定为模块,而在“b.xml”中,“module-2”将被指定为模块。
使用当前修改的模块调用该pom文件的构建。例如,如果修改了module-1,则在命令行中将p.xml指定为pom.xml。
请注意,我没有尝试过,但如果可能的话,这是我能想到的方法之一,我们可以通过它来完成你想要的任务。
答案 2 :(得分:0)