maven学习之jar打包包含资源文件

问题概述:

前几天遇到一个问题,我们的项目有自己开发的jar包,其中有个功能我希望从properties中读取文件的内容(资源文件的路径是/src/main/properties/zsc1/sys.properties),但是打完包(insatll命令)得到包放到环境之后,发现日志记录到了读取资源文件的代码部分报错,经查实打的jar包下面压根就没有我需要读取的资源文件,下面是解决前后的文件对照



 开发工具:

IDEA-2016,打包命令如下图



 

 排查思路:

1:先用了package的命令,解压看到是有资源文件的

2:看pom.xml中 package和install命令配置的不同,如下面代码,但是有install的这个插件的配置,却没有package的,我本来想进去看源码的,但是点进去之后,并未发现什么有价值的信息,所以继续查看pom.xml文件

<!-- install插件 -->
<plugin>
	 <groupId>org.apache.maven.plugins</groupId>
	  <artifactId>maven-install-plugin</artifactId>
	  <version>2.4</version>
</plugin>

 然后又发现,有war,和jar相关的插件,发现新大陆,jar相关的jar包的位置,有个excludes的配置,里面有个log4j.properties的配置,我就在想也许我把自己需要加的路径配置就可以了,所以做了如下的尝试

<!-- war打包插件, 设定war包名称不带版本号 -->
	            <plugin>
	                <groupId>org.apache.maven.plugins</groupId>
	                <artifactId>maven-war-plugin</artifactId>
	                <version>2.3</version>
	                <configuration>
	                    <warName>${project.artifactId}</warName>
	                </configuration>
	            </plugin>
	
	            <!-- jar打包相关插件 -->
	            <plugin>
	                <groupId>org.apache.maven.plugins</groupId>
	                <artifactId>maven-jar-plugin</artifactId>
	                <version>2.4</version>
	                <configuration>
	                    <archive>
	                        <manifest>
	                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
	                        </manifest>
	                    </archive>
                        <excludes>
                            <exclude>log4j.properties</exclude>
                            <!--TODO 这里是一会需要加的配置-->
                        </excludes>
	                </configuration>
	            </plugin>

 这一行代码放到上面的TODO的位置,这样写的原因是我项目的目录结构是这样定义的,如下图:



 

<exclude>**/*.properties</exclude>

 ,然后再次执行install命令的时候,就有资源文件了。

总结:

当遇到这个问题的时候我首先想的是难道jar包里面不支持资源文件的配置?但是想想也不应该啊,我们使用的很多的开源的jar包,都是有资源文件的呢。所以应该是自己命令的问题。

1:war包上面的配置项,并没有excludes的配置,war包install命令就是可以打出资源文件的,jar包的经试验,即使配置和war包保持一致,也是不会有资源文件的,所以应该跟本身的约定有关。

so:如果需要jar打出资源文件,就需要单独的去配置。

2:看了网上别的技术好友的,实验了下,发现这样写也是可以实现的

<build>
        <!--配置打包时不过滤非java文件开始  -->
        <!--说明,在进行模块化开发打jar包时,maven会将非java文件过滤掉,
        xml,properties配置文件等,但是这些文件又是必需的,
        使用此配置可以在打包时将不会过滤这些必需的配置文件。
        -->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
        <!--配置打包时不过滤非java文件结束 -->
    </build>

 本博客属于个人工作中遇到的问题总结,如果写的有不到位的地方,望批评指教,谢谢!

猜你喜欢

转载自anbolihua.iteye.com/blog/2313247