通过系统属性初始化Maven插件复杂参数

时间:2011-11-29 11:48:28

标签: maven-2 maven maven-plugin

我需要从控制台运行maven插件。在插件中,我需要一个复杂的参数:

/**
* @goal do-automation
**/
public class AutomationMojo extends AbstractMojo {

/**
 * The current maven project.
 *
 * @parameter expression="${project}"
 */
protected MavenProject project;

/**
 * App configuration.
 *
 * @parameter expression="${appConfig}"
 */
private AppConfig appConfig;

AppConfig参数看起来像这样:

public class AppConfig {

private String path

private String version

}

我将以下列方式运行maven插件:

mvn group:artifact:version:do-automation -Dproperty.for.appConfig

如何通过系统属性设置AppConfig属性?有可能吗?

我尝试了以下内容,但它对我没有用处:

public class AppConfig {
/**
* @parameter expression="${path}"
*/
private String path

private String version

}

mvn group:artifact:1.0-SNAPSHOT:do-automation -DappConfig.path = 122 -Dpath = 122 它创建了AppConfig,其属性为空值

我正在使用: Apache Maven 2.2.1(r801777; 2009-08-06 14:46:01-0430) Java版本:1.6.0_21 Java home:c:\ Program Files \ Java \ jdk1.6.0_21 \ jre 默认语言环境:en_US,平台编码:Cp1252 操作系统名称:" Windows 7"版本:" 6.1" arch:" x86"家庭:" windows"

3 个答案:

答案 0 :(得分:2)

实际上,Maven 3提供了一些其他方法来做你想要的。请查看此链接,部分(Bean默认属性)

http://blog.sonatype.com/people/2011/03/configuring-plugin-goals-in-maven-3/

您可以在AppConfig中定义set(String configStr)方法,并从命令行传递解析字符串。对于实例。

mvn group:artifact:1.0-SNAPSHOT:do-automation -DappConfig=my/path,version

然后你就可以适当地解析set(...)方法中的“my / path,version”。

答案 1 :(得分:1)

您已阅读this了。这是一段摘录:

  

配置@parameter expression =" $ {aSystemProperty}"   默认值=" $ {anExpression}"

     

指定用于计算要注入的值的表达式   在构建时将Mojo放入此参数中。由...给出的表达式   default-value通常用于指代中的特定元素   POM,例如$ {project.resources},它引用了列表   资源意味着伴随生成的JAR文件中的类。的   当然,默认值不必是表达式,但也可以是a   简单常数如真或1.5。对于String类型的参数   可以将表达式与文字值混合,例如   $ {project.artifactId} - $ {} project.version - 特别。系统属性   由表达式给出,允许用户覆盖默认值   命令行通过-DaSystemProperty = value。注意:如果都没有   指定了default-value和expression,参数只能是   从POM配置。使用' $ {'和'}'是必需的,以   划分可以评估的实际表达式。

答案 2 :(得分:0)

您应该更改您的配置,如下所示:

/**
 * App configuration.
 *
 * @parameter
 */
private AppConfig appConfig;


public class AppConfig {
/**
* @parameter expression="${appConfig.path}"
*/
private String path

/**
* @parameter expression="${appConfig.version}*/
private String version

}

这应该有机会使用您的系统配置参数。首先,我将检查通过插件的通常配置标签的配置是否按预期工作,以查看是否有不同的错误。