ant 到 maven 的转换:正确的方法?
Posted
技术标签:
【中文标题】ant 到 maven 的转换:正确的方法?【英文标题】:ant to maven conversion: correct approach? 【发布时间】: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 走错了路,但一段时间后他们意识到这是软件的问题...;-) 谢谢。我设法将它们解耦。花了一些时间,但我做到了。 :) 【参考方案1】:问题 1 的答案:您错过了 </includes>
标记。(可能是因为 *** 格式!)。我不确定您是否可以一次在两个配置文件上执行 maven 命令。当你这样做时,只有第二个配置文件被执行。尝试分别在每个配置文件上执行命令。
问题2的答案:您错过了<resources>
开始标记。(可能是因为*** 格式!)。此外,如果您想保留结构,您也可以在<outputDirectory>
标签中提及结构,如下所示:
<outputDirectory>$basedir/target/classes/src/main/java/jpl/mipl/mdms/FileService/komodo/ui/savannah/subscription/util/resources</outputDirectory>
这可能看起来很疯狂!但如果您的资源目录很少,它可能会起作用。如果你有更多的资源,那么这可能会变得很麻烦。但无论如何,请检查这是否有帮助!
【讨论】:
以上是关于ant 到 maven 的转换:正确的方法?的主要内容,如果未能解决你的问题,请参考以下文章