将属性添加到maven原型

时间:2018-01-05 13:38:07

标签: java maven maven-archetype

我有一个Maven原型项目,并希望进一步配置一些东西。我试过了:

  1. ${servicelocatorhost}$${servicelocatorport}放入我的.tomcatplugin文件。
  2. .tomcatplugin添加到原型元数据文件中的过滤的文件中。
  3. 添加

    <requiredProperties>
      <requiredProperty key="servicelocatorhost">
        <defaultValue>localhost</defaultValue>
      </requiredProperty>
      <requiredProperty key="servicelocatorport">
        <defaultValue>2809</defaultValue>
      </requiredProperty>
    </requiredProperties>
    
  4. 到原型元数据文件。当我构建这个时,我得到了

    Archetype IT 'basic' failed: Missing required properties in archetype.properties: servicelocatorhost, servicelocatorport
    

    到目前为止,我认为archetype.properties文件仅适用于create-from-project,但不适用于构建原型。我应该在这样的文件中加倍属性和默认值的信息吗?

    我需要做什么才能完成这项工作?

1 个答案:

答案 0 :(得分:2)

创建原型时,还会为其创建集成测试。运行集成测试时使用archetype.properties文件中的值(使用maven-invoker-plugin)。

作为一个例子:我有一个简单的原型来过滤POM。除了GAV坐标之外,我希望archetype用户提供他们的Subversion存储库的名称和应用程序根目录,这样我就可以正确地填充<scm>块。所以我在archetype-metadata.xml文件中创建了变量${scmRepo}${applicationRootDir}${artifactId}

<requiredProperties>
    <requiredProperty key="svnRepo" />
    <requiredProperty key="applicationRootDir" />
    <requiredProperty key="artifactId">
    ....
</requiredProperties>

然后在POM中使用它们(src/main/resouces/archetype-resources/pom.xml):

<scm>
  <connection>scm:svn:https://host.company.com/svn/${svnRepo}/trunk/${applicationRootDir}/${artifactId}</connection>
</scm>

最后一步是在archetype.properties文件中提供默认值。这仅在您作为开发人员构建原型时使用,而不是在您的社区使用原型来创建项目时使用。它允许您确保原型符合您的要求。所以在我的例子中,archetype.properties文件包含

svnRepo=maven
applicationRootDir=basic
artifactId=test

在同一目录中,我有一个verify.groovy文件,其中包含验证原型是否正常工作的代码:

def xmlFile = new File(basedir, "pomFileDir/pom.xml")
assert xmlFile.exists()

def project = new XmlSlurper().parse(xmlFile)
....
assert "scm:svn:https://host.company.com/svn/maven/trunk/basic/test" == project.scm.connection.text()

我是从this blog post,这个archetype documentation和我自己使用Maven调用程序插件的知识中学到的。