添加 属性 到 Maven 原型
Add property to maven archetype
我有一个 Maven 原型项目,想要进一步配置一些东西。我试过了:
- 将
${servicelocatorhost}$
和 ${servicelocatorport}
放入我的 .tomcatplugin
文件中。
- 将
.tomcatplugin
添加到原型元数据文件中的 已过滤 文件。
添加
<requiredProperties>
<requiredProperty key="servicelocatorhost">
<defaultValue>localhost</defaultValue>
</requiredProperty>
<requiredProperty key="servicelocatorport">
<defaultValue>2809</defaultValue>
</requiredProperty>
</requiredProperties>
到原型元数据文件。当我构建它时,我得到
Archetype IT 'basic' failed: Missing required properties in archetype.properties: servicelocatorhost, servicelocatorport
直到现在我都认为 archetype.properties
文件仅用于 create-from-project
而不是构建原型。我是否应该将此类文件中的属性和默认值的信息加倍?
我到底需要什么才能完成这项工作?
创建原型时,还会为它创建一个集成测试。 archetype.properties 文件中的值在 运行 集成测试(使用 maven-invoker-plugin)时使用。
举个例子:我有一个过滤 POM 的简单原型。除了 GAV 坐标之外,我还希望原型用户提供他们的 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, this archetype documentation 那里学到的,也是我自己使用 Maven 调用程序插件的知识。
我有一个 Maven 原型项目,想要进一步配置一些东西。我试过了:
- 将
${servicelocatorhost}$
和${servicelocatorport}
放入我的.tomcatplugin
文件中。 - 将
.tomcatplugin
添加到原型元数据文件中的 已过滤 文件。 添加
<requiredProperties> <requiredProperty key="servicelocatorhost"> <defaultValue>localhost</defaultValue> </requiredProperty> <requiredProperty key="servicelocatorport"> <defaultValue>2809</defaultValue> </requiredProperty> </requiredProperties>
到原型元数据文件。当我构建它时,我得到
Archetype IT 'basic' failed: Missing required properties in archetype.properties: servicelocatorhost, servicelocatorport
直到现在我都认为 archetype.properties
文件仅用于 create-from-project
而不是构建原型。我是否应该将此类文件中的属性和默认值的信息加倍?
我到底需要什么才能完成这项工作?
创建原型时,还会为它创建一个集成测试。 archetype.properties 文件中的值在 运行 集成测试(使用 maven-invoker-plugin)时使用。
举个例子:我有一个过滤 POM 的简单原型。除了 GAV 坐标之外,我还希望原型用户提供他们的 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, this archetype documentation 那里学到的,也是我自己使用 Maven 调用程序插件的知识。