自学内容网 自学内容网

maven打包最终缺少资源文件问题解决

Maven 打包时默认不包含源代码(source code)路径,这是因为它主要关注于编译后的类文件(.class 文件)和其他资源文件(如配置文件、图片等),而不是源代码文件(.java 文件)。Maven 的标准目录结构和打包流程主要围绕编译后的产物进行组织和处理。

Maven 项目标准目录结构

Maven 项目的标准目录结构通常包括以下几个部分:

  • src/main/java:存放项目的 Java 源代码文件。

  • src/main/resources:存放项目所需的资源文件,如配置文件(XML、Properties 文件等)、图片等。

  • src/test/java:存放项目的测试代码。

  • src/test/resources:存放测试所需的资源文件。

  • pom.xml:Maven 的项目对象模型文件,用于配置项目的构建、依赖等信息。

Maven 打包流程

当使用 Maven 打包项目时(如执行 mvn package 命令),Maven 会按照以下步骤进行:

  1. 编译源代码:Maven 会编译 src/main/java 目录下的 Java 源代码文件,并将编译后的 .class 文件放到 target/classes 目录下。

  2. 处理资源文件:Maven 会将 src/main/resources 目录下的资源文件复制到 target/classes 目录下。

  3. 打包:根据项目的类型(如 JAR、WAR),Maven 会将 target/classes 目录下的内容和其他指定的资源文件打包成相应的包文件(如 JAR 包、WAR 包),并放置到 target 目录下。

如何在 Maven 打包中包含源代码

如果你希望在 Maven 打包时包含源代码,可以通过以下几种方式实现:

使用 Maven Source Plugin: Maven Source Plugin 允许你在打包过程中将源代码附加到生成的包文件中。你需要在项目的 pom.xml 文件中配置该插件,并指定源代码的位置。配置示例如下:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>3.2.0</version> <!-- 请根据实际情况选择合适的版本 -->
            <executions>
                <execution>
                    <id>attach-sources</id>
                    <goals>
                        <goal>jar-no-fork</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

配置后,当你执行 mvn package 命令时,Maven 会在 target 目录下生成一个包含源代码的 JAR 文件(如 myartifact-1.0-sources.jar)。

手动包含: 如果你不希望使用 Maven 插件,也可以手动将源代码文件复制到打包后的目录中,但这通常不是推荐的做法,因为它会增加构建过程的复杂性和出错的可能性。

综上所述,Maven 打包时默认不包含源代码路径,但你可以通过配置 Maven Source Plugin 等方式在打包过程中包含源代码。

include参数可导致资源缺失

当在 <resources> 的配置中 includes配置了参数 ,则资源路径只会筛序配置的规则打到包中 所以要保障配置是对的或不配置。
如下示例配置了 所有 properties 会打包 则会导致 resource下的其他文件不会出现在打的jar包中。

    <build>
        <!-- 打包名称 -->
        <finalName>${project.artifactId}</finalName>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/**/*.properties</include>
                </includes>
            </resource>
        </resources>

        <testResources>
            <testResource>
                <directory>src/test/resources</directory>
                <filtering>true</filtering>
            </testResource>
        </testResources>
    </build>

原文地址:https://blog.csdn.net/weixin_42439274/article/details/143018726

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!