我正在写了一个参数,是一个字符串[] Maven插件。
像这样:
/**
* @parameter expression="${args}"
*/
protected String[] args;
这可以通过这样的POM被利用:
<args>
<arg>arg1</arg>
<arg>arg2</arg>
<args>
但我想在命令行中发送
-Dargs={arg1, arg2}
这可能吗?
我正在写了一个参数,是一个字符串[] Maven插件。
像这样:
/**
* @parameter expression="${args}"
*/
protected String[] args;
这可以通过这样的POM被利用:
<args>
<arg>arg1</arg>
<arg>arg2</arg>
<args>
但我想在命令行中发送
-Dargs={arg1, arg2}
这可能吗?
你不能做到这一点直接,据我所知,但它是相当常见的做法是接受分隔字符串,并拆分成一个数组自己。
例如, Maven的网站插件允许指定用逗号分隔的语言环境的字符串,而Maven的斯卡拉-插件处理这允许您使用管式分离机定义的参数。 你可以看一下相关Mojos看参数是如何处理。
下面的一些示例用法:
网站插件:
-Dlocales=enGB,frFR
斯卡拉-插件:
-DaddArgs=arg1|arg2|arg3
更新:如果你想更优雅处理这个问题,你可以使用Maven的共享IO允许一个外部描述文件的定义,然后传递描述符的位置作为属性。 这意味着单个命令行参数可以参考配置的结构。
如果这听起来像它可能为你工作,看看这个答案 ,它描述了如何使用属性外描述符插件,或者这个答案 ,做了XML的Maven的插件相似。 或者,你可以看一下组装插件的想法。
最新的Maven(3.0.3)应与工作原理:
-DaddArgs = ARG1,ARG2,ARG3
据Sonatype的的博客在这里 ,如果你是一个插件开发者和
并使用注释像注释你的数组/集合类型的插件参数:
/** @parameter expression="${args}" */
以这种方式,该插件参数可以通过Maven的自动处理,并且插件的用户可以使用逗号分隔系统属性等经由CLI提供插件阵列/收集型参数mvn myplugin:mygoal -Dargs=a,b,c
要更新@ nybon的回答一下,似乎
@Parameter(property="your.param")
private List<String> yourParam;
作品中,至少当使用maven-plugin-annotations:3.5
的Maven的3.5.0。 与运行
-Dyour.param=val1,val2
设置列表。
通过系统属性指定值的列表,一个插件的方式取决于如何保持最新的插件。
不过,如果你正在处理一个适当的实现插件,是最新的,则指定值数组的插件的正确方式是通过逗号分隔字符串。
这里是一个参考: http://blog.sonatype.com/2011/03/configuring-plugin-goals-in-maven-3/
下面是从参考报价:
对于许多插件参数是偶尔方便经由系统属性指定的命令行它们的值。 在过去,这仅限于简单的类型,如字符串或布尔参数。 最新的Maven释放最后允许插件用户从通过逗号分隔的字符串的命令行配置集合或阵列。 举个例子像这样的插件参数:
去一个远一点,我们可以看看更具体的例子。 考虑中,Wildfly Maven插件。 这个插件有一个叫做过时的配置属性:jvmArgs。
预计这将传递作为一个空间分隔的值列表。 我们都知道,在命令行中,用空格瞎搞并不可爱。 因此,如果我们看一下这个放慢参数在插件的魔力代码的定义,你会发现这样的事情(在这里不用另引号)。
/**
* A space delimited list of JVM arguments.
*
* @deprecated use {@link #javaOpts}
*/
@Parameter(alias = "jvm-args", property = PropertyNames.JVM_ARGS)
@Deprecated
private String jvmArgs;
因此,这是做的东西的老办法。
现在,如果你使用的是最新版本的这个插件(如Alpha6)的。 然后将源代码有一个不错的新的领域被称为javaOpts。 让我们来看看现场看起来像在代码中。
/**
* The JVM options to use.
*/
@Parameter(alias = "java-opts", property = PropertyNames.JAVA_OPTS)
private String[] javaOpts;
所以,我们看到的是,我们已经在StartMojo一个很好的阵列场。 该阵列场正确annoted。 而行家引擎将要设置的值到魔的重任。
当你想通过命令行数据泵到这个领域,你会在你的批处理文件中指定的形式的东西:
-Dwildfly.javaOpts="-Xmx1536M,-Xms1536M,-XX:MaxMetaspaceSize=512M,-XX:-HeapDumpOnOutOfMemoryError"
如果您在使用sapces代替commans尝试samething。 我会告诉你发生了什么:
[INFO]独立服务器正在启动。 无效最大堆尺寸:-Xmx1536M -XX:MaxMetaspaceSize =512米-XX:-HeapDumpOnOutOfMemoryError
所以你看,行家当它与吞噬我的系统属性满的空间就没有做一个字符串分割。 所以Wildfly试图设置JVM内存设置,如果最大内存是满弦。 在另一方面,当我用逗号分开吧,魔适当充实和启动时我可以充分利用应用服务器的内存设置控制。
当然,您要使用系统属性,而不是XML pom.xml的配置,任务,如设置詹金斯工作。 随着系统性能,你是相当灵活。
这就对了。