这类问题一般都是由jar包引用路径不正确引起的,网上参考了一下解决方法:http://www.cnblogs.com/huhu0013/archive/2012/11/09/2762573.html
其宗旨就是修改jar包内目录META-INF下的MANIFEST.MF文件,添加Class-Path,如:Class-Path: lib/some.jar lib/some2.jar。
编写MANIFEST.MF文件时需要注意:
第一行不能空,行与行之间不能有空行,每一行的最后一个字符不能是空格
最后一行一定是空行
每个属性的名称和值之间(冒号后面)一定要有空格
文件的每一行都不能超过72个字节(一般是70个ASCII字母加上回车换行符);如果72个字节不够用,则另起一行并以空格开头:以空格开头的行都被视为前一行的续行。
具体详细的规范请参见Java的官方文档,注意事项见“Notes on Manifest and Signature Files”一节。
还需要注意的是,Class-Path属性指定的类或jar包是本地的文件,不可以是远程访问的类或者JAR包文件中的JAR包,即不能是jarin jar;当然也就不能是本jar包中包含的jar包。要实现对jar in jar的引用,需要自定义相关代码来读取它们。上面提到的RunnableJAR file之所以能够运行,就是因为Eclipse为我们提供了jarinjarloader,来帮助我们读取jar in jar。
最后,还需要在Maven工程里添加这个MANIFEST.MF文件!
编辑 pom.xml:
Maven install后,执行 java -jar name.jar,成功运行。
其宗旨就是修改jar包内目录META-INF下的MANIFEST.MF文件,添加Class-Path,如:Class-Path: lib/some.jar lib/some2.jar。
编写MANIFEST.MF文件时需要注意:
第一行不能空,行与行之间不能有空行,每一行的最后一个字符不能是空格
最后一行一定是空行
每个属性的名称和值之间(冒号后面)一定要有空格
文件的每一行都不能超过72个字节(一般是70个ASCII字母加上回车换行符);如果72个字节不够用,则另起一行并以空格开头:以空格开头的行都被视为前一行的续行。
具体详细的规范请参见Java的官方文档,注意事项见“Notes on Manifest and Signature Files”一节。
还需要注意的是,Class-Path属性指定的类或jar包是本地的文件,不可以是远程访问的类或者JAR包文件中的JAR包,即不能是jarin jar;当然也就不能是本jar包中包含的jar包。要实现对jar in jar的引用,需要自定义相关代码来读取它们。上面提到的RunnableJAR file之所以能够运行,就是因为Eclipse为我们提供了jarinjarloader,来帮助我们读取jar in jar。
最后,还需要在Maven工程里添加这个MANIFEST.MF文件!
编辑 pom.xml:
<!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestFile>src/main/java/META-INF/MANIFEST.MF</manifestFile>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.tencent.name</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
Maven install后,执行 java -jar name.jar,成功运行。