2

我有一个现有的 java 命令行程序,它接受大量参数并使用出色的args4j解析它们。

我现在想制作一个 maven 插件 mojo,它将运行包含在此应用程序中的 Java 代码。

到目前为止,我已经尝试了基本方法:将每个命令行参数复制到 mojo 参数中。但是我发现这非常无聊且容易出错,因为 maven mojo javadoc 注释远不如 args4j 注释完整和集成。

那么,使用 maven 3,有没有更好的方法让我的可执行文件作为 maven mojo 运行?哦,请不要跟我谈论exec-maven-plugin,因为在那种情况下我觉得它太有限了(我的可执行文件必须使用项目设置和用户配置文件的混合运行,我想只是调用 maven -exec-plugin 不会成功)。

4

2 回答 2

2

唯一的方法是通过 mojo 参数,因为这是 Maven 方式,特别是 Maven 插件。

我错过了定义一个包含配置作为 mojo 参数替代的属性文件。但我认为对于 Maven 插件,最佳实践是拥有 Mojo 参数。

于 2011-04-05T13:57:44.673 回答
1

尽管@khmarbaise 的回答从一般角度来看是完全正确的,但我想稍微扩展一下。

我的独立命令行应用程序使用 args4j,但我认为使用Commons CLI或(甚至更多)依赖于主 bean 中相同命令行注释的JCommander可以很好地复制该过程。

所以,我所做的是一个 maven mojo,它使用自省来获取主要 bean 命令行参数的列表。对于这些参数中的每一个,我希望项目/设置信息中存在一个属性。如果此属性存在,我将使用该选项和关联的 finally 构建一个假命令行。

一旦我浏览了所有选项(存储为 maven 属性),我可以使用 args4j 来填充我的 bean,然后使用它的主命令运行这个 bean。

我认为这种方法可以很好地推广,前提是您的应用程序具有一组标志和一个无参数run()方法。

于 2011-04-06T09:33:07.167 回答