我具有以下项目结构:
parent (packing: pom)
+ framework (packing: jar)
+ plugins (packing: pom)
+ plugin_1 (packing: pom)
+ impl (packing: jar)
+ e2e_test (packing: jar)
+ plugin_2 (packing: pom)
+ impl (packing: jar)
+ e2e_test (packing: jar)
在plugin_1.impl
和plugin_2.impl
内部,有一个resource.xml
描述插件。
构建很好,这意味着当我要构建按顺序构建的整个项目时。 但是,安装无法创建相同的结构。 安装后,本地存储库如下所示:
com/company
+ parent/version
+ pom file
+ framework/version
+ jars
+ plugins/version
+ pom file
+ plugin_1/version
+ pom file
+ plugin_1.impl/version
+ jar
+ plugin_1.e2e_tests/version
+ jar
+ plugin_2/version
+ pom file
+ plugin_2.impl/version
+ jar
+ plugin_2.e2e_tests/version
+ jar
但是我想要
com/company/parent/version
+ framework.jar
+ plugins
+ plugin_1.jar
+ plugin_1.xml (renamed resource.xml)
+ plugin_2.jar
+ plugin_2.xml (renamed resource.xml)
是否可以创建所需的结构?
我尝试过maven-install-plugin
,例如:
mvn org.apache.maven.plugins:maven-install-plugin:3.0.0-M1:install-file \
-Dfile=parent/plugins/plugin_1/impl/resource.xml \
-DgroupId=com.company \
-DartifactId=parent \
-Dversion=1.0-SNAPSHOT \
-Dpackaging=file \
-DgeneratePom=true
或与此等价的pom.xml
(但用于广口瓶):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>3.0.0-M1</version>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<groupId>${project.groupId}</groupId>
<artifactId>${project.parent.parent.artifactId}</artifactId>
<version>${project.version}</version>
<packaging>jar</packaging>
<file>${project.build.directory}/${project.build.finalName}.jar</file>
</configuration>
</execution>
</executions>
</plugin>
但这总是会根据artifactId
重命名文件,而我最终会覆盖同一文件。
我能够通过在最高父级目标目录中使用copy-rename-maven-plugin
来创建所描述的结构。
我想要这种结构,因为:
framework
可以使用放在jar
目录中的带有适当描述符的任何plugins
。framework plugin_1 (args)
并检查结果来工作。为此,我需要本地存储库中的工作结构以供测试项目依赖。是否可以在本地存储库中创建所需的结构?
答案 0 :(得分:0)
您似乎在某些方面误解了Maven (local) repositories:
存储库中的完整路径标识具有特定版本的特定工件(JAR,WAR,EAR或POM),因为其路径来自具有标识三元组的Maven Coordinates GAV(groupId
,artifactId
,version
)。其中:
<groupId>com.my.company</groupId>
<artifactId>my-artifact</artifactId>
<version>1.0.0</version>
成为目录结构:
~/.m2/repositories
+ com
+ my
+ company
+ my-artifact
+ 1.0.0
+ my-artifact-1.0.0.jar [or war, ear, ...]
+ my-artifact-1.0.0.pom
在Maven存储库(本地或远程)的工件的层次结构(子)结构中,没有依赖关系(或资源,*.xml
之类的东西)可以在运行时(测试)期间动态使用。
这就是为什么您在构建后会看到同一级别com/company
(包括install
)上的所有工件。它们都是平等的。就Maven而言,没有一个比另一个更可取了。
可能的解决方案:
将framework
和相应的插件实现添加为测试项目的依赖项,并相应地在测试代码中使用它们:
plugin_1.e2e_tests
:
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>framework</artifactId>
<version>...</version>
</dependency>
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>plugin_1.impl</artifactId>
<version>...</version>
</dependency>
plugin_2.e2e_tests
:
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>framework</artifactId>
<version>...</version>
</dependency>
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>plugin_2.impl</artifactId>
<version>...</version>
</dependency>
答案 1 :(得分:0)
Maven本地存储库具有固定的目录结构。此结构不应更改。它反映了Maven坐标(groupId,artifactId,版本)。