maven学习系列8----将resources目录下的文件打包到jar包外

maven默认情况下会把src/main/resources下的文件和class文件一起打到jar包内部,但是有很多场景下都需要把resources下的文件打包到jar包外面,这样修改resources目录下的文件就不需要重新打jar

假设目录结构如下,resources目录下有三个文件


默认打好的jar包如下,即resources下的文件打到了jar包里面



如果想resources目录下的部分或者全部文件不打到jar包内部,可以使用manen下面的配置

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>*.txt</include>
                </includes>
                <excludes>
                    <exclude>*.xml</exclude>
                    <exclude>*.yaml</exclude>
                </excludes>
            </resource>
        </resources>
    </build>

这样a.xml和b.yaml就不会打到jar包中了


maven还有一个maven-resources-plugin可以实现,在打包的时候把resources目录下的文件拷贝到指定的目录下,这样就不需要用户自己去拷贝了,

         <plugins>
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/conf</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>src/main/resources</directory>
                                    <filtering>true</filtering>
                                </resource>
                            </resources>
                        </configuration>

                    </execution>
                </executions>
            </plugin>
        </plugins>

编译好之后,会在target目录下生成conf目录并且把resources目录下的所有文件都自动拷贝到target/conf/目录下,如下



联合上一章中的maven配置,就可以实现把工程中对外的依赖(依赖的jar包,依赖的resources文件)打包到jar外面,例如把依赖的jar包打包到lib目录下,把依赖的resources文件打包到conf目录