[问题] java 在 linux 上编译为 jar 并执行

楼主: obelisk0114 (追风筝的孩子)   2018-03-18 14:13:05
之前都用 IDE 解决,现在突然需要用 jdk 编译
我有三个目录:
lib (放其他需要引用的 jar), 目前有 json-20180130.jar
rank (我的程式 package)
class (之后放产生的 class)
main function 在 MainRun.java
需要引用其他 jar 的程式引用: import org.json.*;
我编写的 MANIFEST.MF (放在相同目录) 和执行 script 有错误而执行失败
这是 MANIFEST.MF 的内容:
Manifest-Version: 1.0
Class-Path: . lib/json-20180130.jar
Main-Class: MainRun
这是 script 的内容:
javac -d class -cp ".:./lib/json-20180130.jar" rank/*.java
jar -cvfm rank.jar MANIFEST.MF class/*
java -jar rank.jar
请各位大大帮忙看一下哪边写错 ?
作者: Killercat (杀人猫™)   2018-03-18 16:46:00
这种情况多半还是用mvn或者gradle build简单点吧....
作者: AI3767 (AIIA)   2018-03-19 01:13:00
执行script的错误讯息是?
作者: ssccg (23)   2018-03-19 09:10:00
manifest中的class name要写rank.MainRun基本上java所有说到class name的都是指完整名称是rank.MainRun,没有class.jar -cvfm rank.jar MANIFEST.MF -C class .jar档中的相对路径要跟package一致,要把class重新对应到jar档中的根目录,你可以解开jar档确认一下jar -cvfm rank.jar MANIFEST.MF -C class . lib/*我只是把你原本的 class/*换成-C class . (把class目录下全包进去且置换成根目录),其他你原本有的还是要有啊.看来单纯把jar包进去是不行的,有些执行环境可以是因为用了特殊的classloader,你必须把lib jar内容解开一起包到你的jar里面,或是就一样把lib jar也复制到你要执行的目录

Links booklink

Contact Us: admin [ a t ] ucptt.com