【问题标题】:Maven plugin complex parameter initialization via system propertiesMaven插件复杂参数初始化通过系统属性
【发布时间】:2012-01-08 18:13:02
【问题描述】:

我需要从控制台运行 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

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

【问题讨论】:

    标签: maven-2 maven maven-plugin


    【解决方案1】:

    您已经阅读了this。摘录如下:

    配置@参数表达式="${aSystemProperty}" 默认值="${anExpression}"

    指定用于计算要注入的值的表达式 在构建时进入 Mojo 的这个参数。给出的表达式 默认值通常用于引用特定元素 POM,比如${project.resources},指的是列表 旨在伴随生成的 JAR 文件中的类的资源。的 当然,默认值不必是表达式,也可以是 简单的常数,如 true 或 1.5。对于 String 类型的参数 可以将表达式与文字值混合,例如 ${project.artifactId}-${project.version}-特殊。系统属性 由表达式给出使用户可以覆盖默认值 通过 -DaSystemProperty=value 的命令行。注意:如果两者都没有 没有指定默认值或者表达式,参数只能是 从 POM 配置。需要使用 '${' 和 '}' 界定可以计算的实际表达式。

    【讨论】:

      【解决方案2】:

      你应该像下面这样改变你的配置:

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

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

      【讨论】:

      • 您是否通过 pom 中的常规配置而不是通过命令行上的参数进行检查?
      【解决方案3】:

      实际上 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”。

      【讨论】:

        猜你喜欢
        • 2019-01-25
        • 1970-01-01
        • 1970-01-01
        • 2011-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多