maven生成jar执行报错:某个类未定义或找不到

这类问题一般都是由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:
  <!-- 打包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,成功运行。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值