【发布时间】:2019-04-08 08:52:27
【问题描述】:
我的项目结构如下:
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 的等效项(但对于 jar):
<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)并检查结果来工作。为此,我需要本地存储库中的工作结构供测试项目依赖。
有没有办法在本地存储库中创建所需的结构?
【问题讨论】:
-
你不能将插件添加到你的框架 pom 并让它们驻留在你的框架代码之外?仅仅是因为您有测试项目,并且只想将依赖项添加到框架项目而不在测试项目POM中定义任何插件吗?
-
我想单独保留插件代码。我颠倒了依赖关系,插件依赖于框架,而不是相反。这样,任何实现接口并具有适当描述符 xml 的 jar 都可以成为插件。而且您不必更改框架代码。端到端测试可以在另一个项目中。我不坚持将它们保留在插件 pom 项目下。它可以与框架处于同一级别。
标签: java maven maven-install-plugin