如何运行jar包中的指定main函数

一、如何运行SpringBoot jar包中的指定main函数

测试类包含了主函数,被一起打到了jar包中。但是如果执行:

java -jar test.jar


那么会执行web服务的主函数。

我们如何指定执行测试类中的主函数呢? 一开始是想到用:

java -cp test.jar com.my.TestClass


但是提示无法找到主函数:Error: Could not find or load main class

原因是SpringBoot打包时,把所有的类都放到了BOOT-INF/classes下,而BOOT-INF不是一个合法的包名。 其实正确的方法如下:

java -cp test.jar -Dloader.main=com.my.TestClass org.springframework.boot.loader.PropertiesLauncher

启动的主函数是org.springframework.boot.loader.PropertiesLauncher,让它去找到TestClass执行

---------------------------------------------------------------------------

二、对后续测试的说明

对下面测试的说明:
testAxis2Springboot.jar :IDEA 工具打的包 File-->Project Structure..-->选择Artifacts,点击“+”号,选择JAR,点击From modules with dependencies
testAxis2Springboot-0.0.1-SNAPSHOT.jar :Springboot工具打的包
其他的*.jar :手工打的包
其中: lib目录是使用IDEA工具打包时,JAR files from libraries的选项是第二项【copy to the output directory and link via manifest】时生成的lib目录
---------------------------------------------------------------------------

三、对于非Springboot jar的运行

对于非Springboot jar,不需要带最后的参数。如果需要依赖包,则需要在 -classpath(-cp) 加上依赖包

3.1、无依赖的main的运行:
jar cvfe my.jar com.myprog.common.XmlFormater  com\myprog\common\XmlFormater.class
java -jar my.jar
3.2、对需要依赖类的运行方法:
jar cvfe mytest.jar com.myprog.clients.test_Clients  com\myprog\
#这样运行不可以,总是提示找不到依赖包
java -classpath D:\classes\lib\* -jar mytest.jar
#需要这样运行:
java -Djava.ext.dirs=lib -jar mytest.jar
java -Djava.ext.dirs=D:\classes\lib -jar mytest.jar
java -Djava.ext.dirs=lib -cp mytest.jar com.myprog.clients.test_Clients

上面这种没法运行,总是提示找不到依赖包,是因为 META-INF\MANIFEST.MF 是打包工具自己建的且没法修改,且里面没有登记依赖包。

执行指定类:

java -Djava.ext.dirs=lib -cp testAxis2Springboot.jar com.myprog.clients.test_Clients
java -Djava.ext.dirs=lib -cp testAxis2Springboot.jar com.myprog.common.XmlFormater

去掉--Djava.ext.dirs参数,把这个jar拷贝到lib目录下也可以:

java -cp lib\* com.myprog.clients.test_Clients

执行指定类,这样成功:

java -cp testAxis2Springboot.jar;lib\* com.myprog.clients.test_Clients
java -cp testAxis2Springboot.jar;lib\* com.myprog.common.XmlFormater

SpringBoot打包的,不能这样执行:原因上面有说明,要用上面第一个方法运行。

java -cp testAxis2Springboot-0.0.1-SNAPSHOT.jar;lib\* com.myprog.clients.test_Clients

----------------------------------------------------------------------------------

四、以下三种打包的测试:
4.1、打包
call mvn clean
call mvn compile
cd target\classes
@echo 指定主类打包……
jar cvfe xml.jar com.myprog.common.XmlFormater com\myprog\
jar cvfe mytest.jar com.myprog.clients.test_Clients com\myprog\
@echo 不指定主类打包……
jar cvfM myprog.jar com\myprog\

copy *.jar D:\classes\
cd /D D:\classes\
4.2、运行

这样运行都是成功的:

java -Djava.ext.dirs=lib -jar mytest.jar
java -Djava.ext.dirs=lib -cp xml.jar com.myprog.clients.test_Clients
java -Djava.ext.dirs=lib -cp myprog.jar com.myprog.clients.test_Clients

java -cp mytest.jar;lib\* com.myprog.clients.test_Clients
java -cp xml.jar;lib\* com.myprog.clients.test_Clients
java -cp myprog.jar;lib\* com.myprog.clients.test_Clients

这是失败的:

java -cp lib\* -jar mytest.jar

对于纠结于怎么运行jar里面的自己的主类的朋友,希望对你们有所帮助。

End。
 

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值