gpt4 book ai didi

Maven 原型(prototype) - 可选属性,默认为空

转载 作者:行者123 更新时间:2023-12-01 13:42:28 47 4
gpt4 key购买 nike

我希望能够使用 从我的原型(prototype)生成项目属性之一默认为空 ,或者如果在命令行中指定,则填充。

这是我的archetype-metadata.xml :

<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor name="basic">
<requiredProperties>
<requiredProperty key="compilerVersion"/>
<requiredProperty key="dependencyClassifier">
<defaultValue></defaultValue>
</requiredProperty>
</requiredProperties>
</archetype-descriptor>

这是行不通的。如果 dependencyClassifier 中有任何非空白值,然后它完美地工作。但是,我无法让它在默认值为“空”的情况下工作。
defaultValue 时出现的错误为空/null 是:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2.4:generate (default-cli) on project standalone-pom: Archetype com.avast.archetype:compile-java:1.0.21 is not configured
[ERROR] Property dependencyClassifier is missing.
[ERROR] -> [Help 1]

或者,我会接受能够在命令行上传递一个空值(或“空白”值)。同样,使用 "-DdependencyClassifier= "不起作用。

如何指定默认情况下应为空的属性?

谢谢

我想要实现的是能够从包含依赖声明的原型(prototype)创建项目:
    <dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>artifact</artifactId>
<version>${dependencyVersion}</version>
<classifier>${dependencyClassifier}</classifier>
</dependency>
</dependencies>

我需要能够实例化 ${dependencyClassifier}关于原型(prototype)创建。 ${dependencyVersion} 可以这样做,因为那永远不会是空的。但是,分类器默认情况下应该为空。

最佳答案

这就是我成功满足您的要求的方式:

在模板pom.xml要生成的 Maven 项目的文件,放置一个空属性,但不要将其用作 classifier 的占位符值,您仍将使用原型(prototype) requiredProperty占位符如下:

<properties>
<!-- empty placeholder, document it accordingly -->
<empty.property></empty.property>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
<classifier>${dependencyClassifier}</classifier>
</dependency>
</dependencies>

然后,在您的 archetype-metadata.xml有以下几点:
<requiredProperties>
<requiredProperty key="dependencyClassifier">
<defaultValue>${empty.property}</defaultValue>
</requiredProperty>
</requiredProperties>

注意匹配:
  • ${empty.property}这里的默认值只是原型(prototype)插件的一个不存在的属性,它被接受(空值确实不起作用)。
  • dependencyClassifier现在有一个默认值,即 ${empty.property}
  • 但是在生成的项目中,empty.property将为空(如果在 dependencyClassifier 调用期间未指定 mvn archetype:generate),因为它作为 Maven 属性存在,具有空值,这使得整个对 Maven 有效:原型(prototype)注入(inject)的属性值是在最后的pom,因此不会破坏任何东西。
  • 因此,分类器将具有 dependencyClassifier值(在运行时指定)或 empty.property (默认值),为空
  • Maven 将空分类器视为非分类器,因此为我们提供了两种行为。

  • 总结一下:

    调用
    mvn archetype:generate ... -DdependencyClassifier=something

    将有效地填充 classifier带有 something 的元素,我们在运行时所需的分类器。

    相反,不指定任何值将离开 classifier${empty.property} ,即为空。 Maven 不会寻找任何分类器(也不会提示)。

    这种方法的唯一缺点是保留 empty.property属性在您的最终 pom.xml 中没有多大意义,这是一个可能会震惊一些纯粹主义者的技巧,但确实有效。

    关于Maven 原型(prototype) - 可选属性,默认为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38831140/

    47 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com