在Java项目中不只是jav文件,经常会有许多资源文件,如属性文件,图片资源什么的,如何把它们也一起加载到Maven工程中去呢?这个问题不难,利用resource就可以达到这个目的.因为${basedir}/src/main/resources都会编译到jar文件中,而且该目录下的内容将直接位于jar文件的顶部.
下图是在前面已经用到过的程序Source Comparer程序,唯一不同的是它的Browse按钮是图片式的.
具体实现的代码是这样的:
String location="/compare.GIF";
URL imageUrl=BrowsePanel.class.getResource(location);
browseBtn = new JButton(new ImageIcon(imageUrl));
从上面的代码可以看出,程序是从类的根路径取得了图片资源compare.GIF,再赋给按钮browseBtn.所以Maven工程中也应该是一样的处理方式.现在的问题是如何把图片资源compare.GIF加载到jar文件中去.
Maven为此提供了一个方法,那就是在MavenResource\src\main下建立一个名为resources的目录,再把图片资源文件compare.GIF拷贝到里面,具体结构如下图:
执行mvn package后,用解压工具如WinRar打开MavenResource-1.0-SNAPSHOT.jar,可以发现图片compare.GIF已经被打进去了.
如果打开cmd窗口,进入target目录,执行命令:
java -cp MavenResource-1.0-SNAPSHOT.jar com.citigroup.junglesong.Inlet
执行的结果和在Eclipse中效果一致,这里就不再贴出了.
上面说的是程序执行时使用资源的情况,如果是测试代码需要使用资源的话,可以${basedir}/src/test下新建一个resources目录,将资源放入其中,测试代码可以使用这样的方式使用资源:
InputStream is = getClass().getResourceAsStream( "/test.properties" );
可见测试代码加载资源和主体代码加载资源是很相似的.
通过对pom文件中build 节点的修改,Maven还可以进行资源过滤,因为目前一时用不到暂时搁置一下,有兴趣或需要的人可以到
http://maven.apache.org/guides/getting-started/index.html#How%20do%20I%20filter%20resource%20files? 去看看.
本文例子下载:
http://www.blogjava.net/Files/sitinspring/MavenResource20070620211407.zip