2010-08-13 85 views
3

说我这样做:如何从一个可执行的JAR引用的tools.jar

java -jar someJar 

“someJar” 需要参考的tools.jar(对于JSP编译)。我不想在someJar中捆绑tools.jar,因为我害怕与正在执行的JVM不兼容。我不能指定-classpath,因为在使用-jar时它会被忽略。我尝试了-Djava.ext.dirs,但没有奏效。有没有人有关于如何从可执行jar引用tools.jar的想法?

回答

3

开始使用Java 1.4,tools.jar needs to be included in the user classpath

的工具类现在是在一个单独的 存档(tools.jar中),如果包含在用户 类路径可以 只能用(被解释不久)。

换句话说,tools.jar不能放在扩展目录中。这实际上意味着在JAR的清单中指定它可能根本不是一个好主意。但有几个选项:

  1. 使用CLASSPATH变量或-cp选项指定tools.jar。如果您在JAR中有一个主类,可以使用java -cp $JDK_HOME/lib/tools.jar MainClass命令对其进行初始化,其中MainClass是该类的完全限定名称。
  2. 使用加载tools.jar的自定义类加载器,前提是您知道JDK主目录的位置。使用JRE会使事情变得困难,因为您将被迫请求用户指定JDK的位置。可以使用System.getProperty调用通过java.home属性确定JDK的位置。
0

-jar选项优先于-classpath选项。但是,您可以在正在执行的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> 

需要注意的是,如果你想在类中包含多个罐子-Path属性,他们必须在清单文件中的单行上

0

我不希望清单参考系统相关位置。使用-jar时,我也不能使用-classpath。我认为解决这个问题的方法是使用-classpath,而不是使用-jar。我不会将主要类放在清单中,而是将主要类放在命令行上。

相关问题