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

如何将父Maven项目中的文件复制到子项目生成的JAR中

如何让父Maven项目的LICENSE/NOTICE文件被子项目打包进JAR

你遇到的问题很典型——父POM里的<resources>配置并不会自动被子项目继承,而且子项目构建时默认只会扫描自己的资源目录,没法直接访问父项目的src/license文件夹。下面给你一个直接有效的解决办法:

使用maven-resources-plugin实现跨项目资源复制

在父POM的<build><plugins>中添加以下配置,通过插件绑定到构建阶段,让子项目自动复制父项目的许可证文件到自己的输出目录:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-resources-plugin</artifactId>
      <version>3.3.1</version> <!-- 建议使用最新稳定版,避免兼容性问题 -->
      <executions>
        <execution>
          <id>copy-parent-license-files</id>
          <phase>process-resources</phase> <!-- 在资源处理阶段执行复制 -->
          <goals>
            <goal>copy-resources</goal>
          </goals>
          <configuration>
            <!-- 输出到子项目的classes/META-INF目录,最终会被打包进JAR -->
            <outputDirectory>${project.build.outputDirectory}/META-INF</outputDirectory>
            <resources>
              <resource>
                <!-- 用Maven内置属性指向父项目的根目录 -->
                <directory>${project.parent.basedir}/src/license</directory>
                <includes>
                  <include>LICENSE.txt</include>
                  <include>NOTICE.txt</include>
                </includes>
              </resource>
            </resources>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

配置说明:

  • ${project.parent.basedir}是Maven的内置属性,只要子项目的<parent>节点配置正确,就能精准定位到父项目的根目录,不用担心路径写错。
  • 插件绑定到process-resources阶段,这个阶段在子项目编译前执行,复制后的文件会被放到target/classes/META-INF下,最终自然会被打包进JAR包。
  • 指定插件版本是个好习惯,避免不同环境下Maven默认插件版本不一致导致的问题。

额外提示

如果父项目本身也需要把这两个文件打包进自己的JAR,这个配置同样有效——父项目构建时${project.parent.basedir}会指向自身目录,相当于复制自己的文件到META-INF,完全兼容。

内容的提问来源于stack exchange,提问作者jeff porter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:55:20