Maven原型不使用属性创建模块名称
我创建了一个原型,您可以在其中使用 一个必需的属性moduleName,这里是原型元数据xml(reduced,我也尝试了类似的结果) 该值在项目的其他一些文件上被正确替换,因此 我想没有拼写问题吧 我见过很多类似的东西,但它们都使用rootArtifactId,事实上 如果我使用rootArtifactId(作为名称的起始部分),它将按预期工作Maven原型不使用属性创建模块名称,maven,maven-archetype,Maven,Maven Archetype,我创建了一个原型,您可以在其中使用 一个必需的属性moduleName,这里是原型元数据xml(reduced,我也尝试了类似的结果) 该值在项目的其他一些文件上被正确替换,因此 我想没有拼写问题吧 我见过很多类似的东西,但它们都使用rootArtifactId,事实上 如果我使用rootArtifactId(作为名称的起始部分),它将按预期工作 找不到类似的问题,知道它为什么不工作,或者如何工作吗?查看maven原型源代码(版本2.2),似乎唯一可能使用的值是从DefaultFileSetac
找不到类似的问题,知道它为什么不工作,或者如何工作吗?查看maven原型源代码(版本2.2),似乎唯一可能使用的值是从DefaultFileSetacheTypeGenerator提取的rootArtifactId
while(subprojects.hasNext()){
ModuleDescriptor项目=子项目。下一步();
File moduleOutputDirectoryFile=新文件(outputDirectoryFile
,StringUtils.replace(project.getDir()
,“\uuuu rootArtifactId\uuuuuuuuu”
,rootartiactid
));
...........
我找到了一个合理的解决办法
似乎唯一可以使用rootArtActID的地方是
元素在原型描述符中,但在每个
您可以使用moduleName属性而不会遇到任何问题
我所做的:
在中使用${moduleName}
- 模块pom中的artifactId
- 一些默认依赖项
- 主pom中的模块定义
(模块-${moduleName})
- 等等
- src/main/java和resources中的包名称
- 使用修复模块名称,如 模块-sample1和模块-sample2 (当然,还要命名其中的目录。) 工件资源(以相同的方式)
问题,tonio。从项目生成原型后,编辑文件
target\generated sources\archetype\src\main\resources\META-INF\maven\archetype metadata.xml
加
pom.xml
这将使其过滤您的pom文件!然后再次运行
mvn安装。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>
src/main/java
**/*.爪哇
pom.xml
4.0.0
${groupId}
${rootArtifactId}
${version}
${artifactId}
战争
请看没有太多说明问题的bug,但至少问题已经出现了。我也有同样的问题。你说的“postreate pom.xml”是什么意思?在项目创建结束时有没有标准的方法来执行一些创建后操作?我没有找到这样做的方法,我只是创建postreate-pom.xml作为项目a的一部分然后运行它来完成项目设置。正确的方法是@sgpalit的方法(尽管不是直接的方法)。我遇到的问题是我试图使用${artifactId}在一个config.yml文件中,它不起作用。进入archetype-metadata.xml并包含/*.yml是有效的。谢谢你救了我一天!谢谢你,尽管这是一个正确的答案,但值得详细说明。在archetype资源中显示目录结构,至少因为它不是直接的
For the directory: project/module-__moduleName__-api
For the pom/artifactId: module-${moduleName}-api
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory></directory>
<includes>
<include>pom.xml</include>
</includes>
</fileSet>
<?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>