2
回答
使用ant能够运行编译的jar包,但换成java命令后就不能运行了

环境:fedora 16 64位 、 ant 

总述:使用ant能够运行编译的jar包,但换成java命令后就不能运行了,不甘心只能通过ant来运行写的程序,请求各位帮助

ant build.xml 中相关部分

<property name="lib_dir" value="/usr/share/java"/>
<property name="lib_segmenter_dir" value="/home/Data/NLP/stanford-segmenter-2012-07-09"/>
<property name="lib_parser_dir" value="/home/Data/NLP/stanford-parser-2012-07-09"/>
。。。。打包
<target name="build" depends="compile">
	<jar jarfile="${native_jar}" basedir="${dest}">
		<manifest>
			<attribute name="Built-By" value="${user.name}"/>
			<attribute name="Main-class" value="NativeUtil.testMain"/>
		</manifest>	
	</jar>
</target>
。。。运行
<target name="run" depends="build">
<java classname="NativeUtil.testMain">
	<classpath>
		<path location="${native_jar}"></path>  程序jar包
	</classpath>

	<classpath>  依赖
		<fileset dir="${lib_dir}">
				<include name="Ice.jar"/>	
		</fileset>
		<fileset dir="${lib_segmenter_dir}">
				<include name="seg.jar"/>	
		</fileset>
		<fileset dir="${lib_parser_dir}">
				<include name="stanford-parser.jar"/>	
				<include name="stanford-parser-2012-07-09-models.jar"/>	
		</fileset>						
	</classpath>		

</java >
</target>
使用ant run 命令能够正常运行!


但是将直接用java来运行就出现了问题,我加载jar包使用的方式为-Xbootclasspath/a:

使用的完整命令为:

java -Xbootclasspath/a:/usr/share/java/Ice.jar:/home/Data/NLP/stanford-segmenter-2012-07-09/seg.jar:/home/Data/NLP/stanford-parser-2012-07-09/stanford-parser-2012-07-09-models.jar:/home/Data/NLP/stanford-parser-2012-07-09/stanford-parser.jar: -jar  nlp_util_native
分行显示


java -Xbootclasspath/a:/usr/share/java/Ice.jar:/home/Data/NLP/stanford-
segmenter-2012-07-09/seg.jar:/home/Data/NLP/stanford-parser-2012-07-09
/stanford-parser-2012-07-09-models.jar:/home/Data/NLP/stanford-parser-
2012-07-09/stanford-parser.jar: -jar  nlp_util_native


主要意思是通过-Xbootclasspath/a:加载四个依赖包 ,然后运行nlp_util_native但是总是不对

出现错误为:

serDictionary=/home/Data/NLP/stanford-segmenter-2012-07-09/data/dict-chris6.ser.gz
sighanCorporaDict=/home/Data/NLP/stanford-segmenter-2012-07-09/data
inputEncoding=UTF-8
sighanPostProcessing=true
Exception in thread "main" java.lang.ExceptionInInitializerError
	at NativeUtil.testMain.main(Unknown Source)
Caused by: java.lang.NullPointerException
	at edu.stanford.nlp.ie.AbstractSequenceClassifier.loadStreamFromClasspath(AbstractSequenceClassifier.java:1468)
	at edu.stanford.nlp.ie.AbstractSequenceClassifier.loadClassifierNoExceptions(AbstractSequenceClassifier.java:1516)
	at NativeUtil.GeneralUtilParser.<clinit>(Unknown Source)
	... 1 more
其中

serDictionary=/home/Data/NLP/stanford-segmenter-2012-07-09/data/dict-chris6.ser.gz
sighanCorporaDict=/home/Data/NLP/stanford-segmenter-2012-07-09/data
inputEncoding=UTF-8
sighanPostProcessing=true

这部分是正确运行的,但就在这就出错了。通过ant运行,正确输出为:

[java] serDictionary=/home/Data/NLP/stanford-segmenter-2012-07-09/data/dict-chris6.ser.gz
 [java] sighanCorporaDict=/home/Data/NLP/stanford-segmenter-
2012-07-09/data
 [java] inputEncoding=UTF-8
 [java] sighanPostProcessing=true
 [java] Loading classifier from /home/Data/NLP/stanford-segmenter-
2012-07-09/data/ctb.gz ... 
 [java] Loading Chinese dictionaries from 1 files:
 [java]   /home/Data/NLP/stanford-segmenter-2012-07-09/data/dict-
chris6.ser.gz
 [java] 
 [java] loading dictionaries from /home/Data/NLP/stanford-segmenter-
2012-07-09/data/dict-chris6.ser.gz...Done. Unique words in 
ChineseDictionary is: 423200
 [java] done [14.6 sec].
不知道为什么会出现这种怪异的事情?不甘心只能通过ant来运行写的程序,请求各位帮助啊



举报
李东亮
发帖于6年前 2回/2K+阅
共有2个答案 最后回答: 6年前

引用来自“肖国颖”的答案

为什么用Xbootclasspath,用cp不行吗?

用cp能运行了,非常感谢!

不过运行的不是jar包,而是jar包里面的类(NativeUtil.testMain)。要运行jar包(java -jar 的方法)还是要用Xbootclasspath加载依赖包的(用cp不行),这里不知什么就不行了。总之,能通过cp运行了,命令如下:

java -cp /home/Data/NLP/stanford-segmenter-2012-07-09/seg.jar:
/home/Data/NLP/stanford-parser-2012-07-09/stanford-parser-2012-07-09-
models.jar:/home/Data/NLP/stanford-parser-2012-07-09/stanford-
parser.jar:.:./nlp_util_native  NativeUtil.testMain 
--- 共有 2 条评论 ---
李东亮回复 @肖国颖 : 明白了。。 6年前 回复
NoahX如果用Xbootclasspath,说明你的类中有和jdk自带类冲突的地方,会忽略原有jdk的类而加载你的。它和类路径(cp)是不同的含义。 6年前 回复
顶部