【发布时间】:2017-08-31 00:01:47
【问题描述】:
我的任务是将使用ant 创建的java 项目转换为maven。
这就是项目的设置方式。
-
所有的源码都存放在
src目录中。 -
ant的编译目标是编译整个src目录。 -
ant的打包目标有几个子目标。每个目标都有不同的 jar,其中有
include或exclude目录。
这是我采取的方法。
-
找出所有依赖项。将它们存储在
parent pom的DependencyManagement部分中 -
创建一个模块并复制整个
src目录。 -
编译它。
-
尝试为不同的
jar文件创建单独的模块。
问题:文件不可分离。大多数文件都依赖于其他文件。我试着把它们分开。它导致创建循环依赖关系。因此,这一步失败了。
- 使用不同的配置文件和
maven-jar-plugin到include或exclude包。
问题 1 当我尝试此 mvn install -P profile1,profile2 时,target 只有 jar 文件用于 profile2。他们都有maven-jar-plugin,每个都有不同的finalName。
<profile>
<id>profile1</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<includes>
<include>**/src/.../profile1/**</include>
<finalName>profile1-lib</finalName>
</configuration>
</plugin>
</plugins>
</build>
</profile>
是有不同的命令还是我做错了什么?
问题 2 其中一个库中有几个 image 文件。
上述方法不会复制结果jar中的image文件。
我了解maven 想要resources 目录中的所有资源。我将移动图像,但现在我正在尝试将它们包含在 jar 中。
我添加了maven-resources-plugin。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<resource>
<directory>src/main/java/jpl/mipl/mdms/FileService/komodo/ui/savannah/subscription/util/resources</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
当我运行mvn install -P profile1 时,我可以看到日志显示Copying # resources。
我还可以看到它们被复制到目标/类。我给插件的路径。但它们都被复制到该目录中。
我想保留结构,结果jar还是没有。
答案:我必须将它们移至resources 目录。 maven 是严格的。
有什么我应该做的不同的事情吗?
额外问题我是否使用了正确的插件?或者有没有更高效的插件我应该使用?
谢谢。
【问题讨论】:
-
在 Ant 中将目录打包到单独的 jar 文件中意味着在 Maven 中有不同的模块......如果你被循环依赖所吸引,你的解耦没有正确完成......使用配置文件运行maven-jar-plugin 是错误的设置...
-
我也对此表示怀疑。我切换到配置文件,因为我浪费了大约 10 个小时的解耦。我会再试一次。
-
如果您迁移此类项目,您将了解解耦问题......我也在支持一个更大的项目,首先他们指责 Maven 走错了路,但一段时间后他们意识到这是软件的问题...;-)
-
谢谢。我设法将它们解耦。花了一些时间,但我做到了。 :)
标签: maven ant maven-plugin