有没有办法从原型生成后期处理项目?

时间:2013-10-24 11:35:17

标签: maven maven-archetype

说我有一个原型,我从中生成一个项目。但是我希望通过命令行传递占位符的值来解决在生成时间之后生成的项目的属性文件中的占位符。

例如,具有以下命令行:

mvn archetype:create -DarchetypeGroupId = ... -DarchetypeArtifactId = ... -DarchetypeVersion = 1.0 -DgroupId = ... -DartifactId = my-project -Dversion = 1.0-SNAPSHOT -Dhello = Hello!< /强>

说原型包含app.properties(作为正在生成的项目的一部分),其中包含以下内容:

问候= $ {你好}

是否可以用“Hello!”替换$ {hello}在mvn archetype:create command?

的结果生成项目之后

3 个答案:

答案 0 :(得分:4)

是的,这是可能的。来自advanced usage guide的maven原型:

  

如果用户想要进一步自定义生成的项目,可以在src / main / resources / META-INF /中添加名为archetype-post-generate.groovy的groovy脚本。此脚本将以生成的原型的META-INF文件夹结束,并在从此原型创建项目时执行。这个groovy脚本可以访问ArchetypeGenerationRequest对象,以及所有System.getProperties()和用户指定的所有原型生成属性。

答案 1 :(得分:0)

您可以按照以下格式在原型中定义其他属性: https://maven.apache.org/archetype/maven-archetype-plugin/specification/archetype-metadata.html

例如:

定义文件:src \ main \ resources \ META-INF \ maven \ archetype-metadata.xml

<archetype-descriptor 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd" 
  name="modelant.metamodel.api">

<requiredProperties>
  <requiredProperty key="package"><defaultValue>${groupId}.${artifactId}</defaultValue></requiredProperty>

  <requiredProperty key="parentGroupId"><defaultValue>${groupId}</defaultValue></requiredProperty>
  <requiredProperty key="parentArtifactId"><defaultValue>${artifactId}</defaultValue></requiredProperty>
  <requiredProperty key="parentVersion"><defaultValue>${version}</defaultValue></requiredProperty>

  <requiredProperty key="metamodelUrl"/>
 </requiredProperties>
</archetype-descriptor>

在这里,您可以看到它定义了其他必需的属性,因此必须在对话框中强制提供它们,其中:

  • 某些属性可能没有价值 - 请参阅metamodelUrl
  • 某些属性也可能具有默认值 - 作为静态文本 - 或引用先前定义的标准属性的值:groupId,artifactId,version
  • 某些属性可能会覆盖标准属性的值 - “package”属性。在这里重新定义。

请注意:

答案 2 :(得分:-1)

不确定我是否理解正确。对于项目创建后的后期处理,您可以使用param -Dgoals并调用自定义插件。

我不确定你的要求,但为什么你不能在项目生成过程中做同样的事情呢?