使用Maven create-from-project创建原型:如何包含空目录?
解决Maven Archetype create-from-project包含空目录的问题
当你用mvn archetype:create-from-project从现有项目生成原型时,Maven默认会跳过空目录——因为它只扫描包含文件的目录,所以像src/main/java这种空文件夹不会被纳入原型。下面是两种靠谱的解决方法:
方法一:添加占位文件并配置自动移除
这是最常用的方案,核心思路是给空目录加一个临时占位文件,让Maven识别到这个目录,然后在原型生成项目时自动删掉这个占位文件。
给空目录添加占位文件
在你想要包含的空目录(比如src/main/java)里创建一个.keep文件(内容可以是空的,或者写个注释说明这是占位用的)。这个文件只是为了让Maven注意到这个目录,后续会被移除。生成原型骨架
运行常规的create-from-project命令:mvn archetype:create-from-project修改原型的元数据文件
找到生成的原型项目(默认在target/generated-sources/archetype目录下),编辑src/main/resources/META-INF/maven/archetype-metadata.xml。
在对应空目录的<fileSet>节点里,添加<excludes>规则,把占位文件排除在最终生成的项目之外:<fileSet filtered="true" encoding="UTF-8"> <directory>src/main/java</directory> <includes> <include>**/*.java</include> </includes> <excludes> <exclude>**.keep</exclude> </excludes> </fileSet>这样当用户用这个原型创建新项目时,
.keep文件不会被生成,而空目录会被保留下来。
方法二:手动修改原型的目录结构
如果不想用占位文件,你可以直接手动在生成的原型里创建空目录,然后更新archetype-metadata.xml:
- 运行
mvn archetype:create-from-project生成初始原型。 - 进入
target/generated-sources/archetype/src/main/resources/archetype-resources目录,手动创建你需要的空目录(比如src/main/java)。 - 编辑
archetype-metadata.xml,添加对应的<fileSet>节点:
这里设置<fileSet filtered="false" encoding="UTF-8"> <directory>src/main/java</directory> </fileSet>filtered="false"是因为目录里没有需要过滤的文件,这样Maven就会把这个空目录包含到原型中。
验证效果
修改完原型后,你可以先在本地安装这个原型:
cd target/generated-sources/archetype mvn install
然后用这个原型创建新项目,检查空目录是否被正确包含:
mvn archetype:generate -DarchetypeGroupId=你的groupId -DarchetypeArtifactId=你的artifactId -DarchetypeVersion=你的版本号
内容的提问来源于stack exchange,提问作者JF Meier
相关产品推荐
相关产品推荐

