用eclipse打普通的JAR包,很好打,依赖的JAR也不需要处理,但是用eclipse打可运行JAR包时,路径问题是个大问题,各种配置文件的读取或者applicationContext.xml 的初始化时,即使用了classload类加载器来获取相关路径,也是不对的,因为jar 包本身只是一个文件,获取绝对路径的话,其他程序是无法访问JAR包里的东西的,只能用类加载器本身的一个读取文件的流方法来读取,另一种就是JAR包的跟目录下的相对路径可以直接拿来用,根据实际打成JAR包的目录结构去实现文件的访问。路径问题解决之后,需要注意的就是jar包本身所依赖的第三方JAR包,这个需要在MANIFEST.MF进行classpath的引入,例如 jar包sojump.jar和jar包所依赖的第三方jar包文件夹sojump_lib在同一个目录下,MANIFEST.MF中加上Manifest-Version: 1.0
Class-Path: . sojump_lib/annotations-api.jar sojump_lib/catalina-ant.j
ar sojump_lib/catalina-ha.jar
另一种打成JAR包的方法就是用maven的maven-shade-plugin打包插件来实现,用这个插件实现的话,路径问题和第三方jar包的依赖都不用考虑,因为插件都帮你处理好了,
大概实现如下:
pom.xml需要加入如下配置:
<groupId>genebook.websvr.hms</groupId>
<artifactId>genebook_sojump</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>genebook_sojump</name> 打成jar包
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<!-- -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>bgi.genebook.sojump.timer.ImitateAuthTimer</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>