最近在思考代码重用的问题,举个简单的例子,为了隔离前后台的操作,前台一个项目,后台一个项目,这里就会出现部分通用代码段的重用问题,本文提供几个解决方案:
一: 我们可以选择项目依赖,很简单的就解决这个问题,本文不对这里的解决方法进行过多描述(项目右键-Properties-Java Build Path 选中Projects,将通用的base项目代码加入到Build Path里面即可)··
二: 将通用代码段打包Jar,今天在测试这种解决方案的时候,在使用spring注解引入jar包中的service时候,会报找不到对应的service,很奇怪的一个问题,后来查询相关资料,发现问题出现在生成jar包的方式上,即所谓打jar包:
如果打包Jar的时候 选中这个Add directory entries 之后,就不会出现所谓的getResource获取资源总是为空的情况了~~
具体原因如下:
可以使用如下代码段进行测试:
public static void main(String[] args) throws Exception {
// 项目中jar包所在物理路径
String jarName = "E:/testpackage.jar";
JarFile jarFile = new JarFile(jarName);
Enumeration<JarEntry> entrys = jarFile.entries();
while (entrys.hasMoreElements()) {
JarEntry jarEntry = entrys.nextElement();
System.out.println(jarEntry.getName());
}
}
默认生成的jar包,运行结果如下:
META-INF/MANIFEST.MF
com/alexgaoyh/util/DateStyle.class
……
如果勾选Add directory entries选项生成的jar包,运行结果如下:
META-INF/MANIFEST.MF
com/
com/alexgaoyh/
com/alexgaoyh/util/
com/alexgaoyh/util/DateStyle.class
com.test真正的含义是package包域名,就好比.net里的命名空间,它只是为了区分、汇总、唯一标识不同的类而提出的概念,跟文件夹目录层次结构是两回事,我们只是习惯上用文件夹目录来展示package而已。但package却不一定非要用过文件夹目录来展示。