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,其中有 includeexclude 目录。

这是我采取的方法。

    找出所有依赖项。将它们存储在parent pomDependencyManagement 部分中

    创建一个模块并复制整个src 目录。

    编译它。

    尝试为不同的jar 文件创建单独的模块。

问题:文件不可分离。大多数文件都依赖于其他文件。我试着把它们分开。它导致创建循环依赖关系。因此,这一步失败了。

    使用不同的配置文件和maven-jar-pluginincludeexclude 包。

问题 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 的答案:您错过了 &lt;/includes&gt; 标记。(可能是因为 *** 格式!)。我不确定您是否可以一次在两个配置文件上执行 maven 命令。当你这样做时,只有第二个配置文件被执行。尝试分别在每个配置文件上执行命令。

问题2的答案:您错过了&lt;resources&gt; 开始标记。(可能是因为*** 格式!)。此外,如果您想保留结构,您也可以在&lt;outputDirectory&gt; 标签中提及结构,如下所示:

<outputDirectory>$basedir/target/classes/src/main/java/jpl/mipl/mdms/FileService/komodo/ui/savannah/subscription/util/resources</outputDirectory>

这可能看起来很疯狂!但如果您的资源目录很少,它可能会起作用。如果你有更多的资源,那么这可能会变得很麻烦。但无论如何,请检查这是否有帮助!

【讨论】:

以上是关于ant 到 maven 的转换:正确的方法?的主要内容,如果未能解决你的问题,请参考以下文章

Ant 到 Maven - 多个构建目标

如何将 Ant 项目转换为 Maven 项目

在 Netbeans 中从 ant 迁移到 maven

java文件中的Maven版本号

Maven 或 Ivy 用于管理 Ant 的依赖关系?

使用 OSGI 从 Ant 迁移到 Maven?