You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Maven create-from-project创建原型:如何包含空目录?

解决Maven Archetype create-from-project包含空目录的问题

当你用mvn archetype:create-from-project从现有项目生成原型时,Maven默认会跳过空目录——因为它只扫描包含文件的目录,所以像src/main/java这种空文件夹不会被纳入原型。下面是两种靠谱的解决方法:

方法一:添加占位文件并配置自动移除

这是最常用的方案,核心思路是给空目录加一个临时占位文件,让Maven识别到这个目录,然后在原型生成项目时自动删掉这个占位文件。

  1. 给空目录添加占位文件
    在你想要包含的空目录(比如src/main/java)里创建一个.keep文件(内容可以是空的,或者写个注释说明这是占位用的)。这个文件只是为了让Maven注意到这个目录,后续会被移除。

  2. 生成原型骨架
    运行常规的create-from-project命令:

    mvn archetype:create-from-project
    
  3. 修改原型的元数据文件
    找到生成的原型项目(默认在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:

  1. 运行mvn archetype:create-from-project生成初始原型。
  2. 进入target/generated-sources/archetype/src/main/resources/archetype-resources目录,手动创建你需要的空目录(比如src/main/java)。
  3. 编辑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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:03:30