说我这样做:
java -jar someJar
“someJar”需要引用tools.jar(用于jsp编译)。我不想在someJar中捆绑tools.jar,因为我担心与执行的JVM不兼容。我无法指定-classpath,因为在使用-jar时会忽略它。我试过-Djava.ext.dirs但是没用。有没有人知道如何从可执行jar中引用tools.jar?
答案 0 :(得分:3)
从Java 1.4开始,tools.jar needs to be included in the user classpath:
工具类现在位于 单独存档(tools.jar)并且可以 仅在包含在用户中时使用 类路径(稍后会解释)。
换句话说,tools.jar不能放在扩展目录中。这实际上意味着在JAR的清单中指定它可能根本不是一个好主意。但是有几种选择:
java -cp $JDK_HOME/lib/tools.jar MainClass
命令进行初始化,其中MainClass
是该类的完全限定名称。答案 1 :(得分:0)
-jar选项优先于-classpath选项。但是,您可以在正在执行的jar的清单文件中包含类路径引用。有一个名为“Class-Path”的属性,它可以包含对其他jar的相对或绝对引用
这是一个片段,向您展示如何
<target name="jar" depends="compile">
<jar destfile="foo.jar" basedir="classes">
<manifest>
<attribute name="Main-Class" value="com.wiggle.foo" />
<attribute name="Class-Path"
value="C:/Java/jdk1.5.0_21/lib/tools.jar" />
</manifest>
</jar>
</target>
请注意,如果要在Class-Path属性中包含多个jar,它们必须位于清单文件中的一行
答案 2 :(得分:0)
我不希望清单引用依赖于系统的位置。使用-jar时我也不能使用-classpath。我认为解决方法是使用-classpath而不是使用-jar。我不会将Main-Class放在清单中,而是将主类放在命令行上。