我创建了一个原型,您可以在其中设置moduleName(或期望) 一个必需的属性moduleName,这里是原型元数据xml(简化,我也尝试过类似的结果)
<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor name="modules-archetype">
<requiredProperties>
<requiredProperty key="moduleName">
</requiredProperty>
</requiredProperties>
<modules>
<module id="modules-${moduleName}-api"
dir="modules-__moduleName__-api"
name="modules-${moduleName}-api">
<fileSets>
<fileSet encoding="UTF-8">
<directory>src/main/java</directory>
</fileSet>
</fileSets>
</module>
</modules>
</archetype-descriptor>
安装并生成后,未使用moduleName值 目录名称或artifactid,resuting值是
For the directory: project/module-__moduleName__-api
For the pom/artifactId: module-${moduleName}-api
在项目的其他一些文件中正确替换该值,因此 我猜没有拼写问题。
我见过很多类似的东西,但是所有这些东西都使用了rootArtifactId,事实上 如果我使用rootArtifactId(作为名称的起始部分),它按预期工作。
无法找到类似的问题,不知道为什么它不起作用,或者如何让它起作用?
答案 0 :(得分:4)
我找到了一个合理的解决方法。
似乎唯一只能使用 rootArtifactId 的地方
原型描述符中的 <module>
元素,但在其他所有元素中
您可以毫不费力地使用 moduleName 属性。
我做了什么:
在
中使用 $ {moduleName}(<module>module-${moduleName}</module>)
在
中使用 __ moduleName __在工件描述符
中需要修复的内容
所有这些都嵌入在postcreate-pom.xml中的ant脚本中 在项目创建后运行。
它运作顺利。
希望它对某人有用。
感谢每个人花时间阅读我的 问题,tonio。答案 1 :(得分:2)
查看maven-archetype源代码(版本2.2),似乎唯一可能使用的值是从DefaultFilesetArchetypeGenerator中提取的rootArtifactId
while (subprojects.hasNext() ) {
ModuleDescriptor project = subprojects.next();
File moduleOutputDirectoryFile = new File( outputDirectoryFile
, StringUtils.replace( project.getDir()
, "__rootArtifactId__"
, rootArtifactId
));
...........
答案 2 :(得分:1)
从项目生成原型后,编辑文件target\generated-sources\archetype\src\main\resources\META-INF\maven\archetype-metadata.xml
。
添加
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory></directory>
<includes>
<include>pom.xml</include>
</includes>
</fileSet>
这将使它过滤你的pom文件!然后再次运行mvn install
。
答案 3 :(得分:1)
archetype-metadata.xml和子模块的pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor name="multi-module">
<modules>
<module name="${rootArtifactId}-ria" id="${rootArtifactId}-ria" dir="__rootArtifactId__-ria">
<fileSets>
<fileSet filtered="true" packaged="true">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" packaged="true">
<include>pom.xml</include>
</fileSet>
</fileSets>
</module>
</modules>
</archetype-descriptor>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}</artifactId>
<version>${version}</version>
</parent>
<artifactId>${artifactId}</artifactId>
<packaging>war</packaging>
</project>