3 回答
TA贡献1111条经验 获得超0个赞
您可以使用两种 -jar
或者 -cp
,你不能将二者结合起来。如果要在类路径上放置其他JAR,则应将它们放在主JAR的清单中,然后使用java -jar
或者将完整的类路径(包括主JAR及其依赖项)放入其中,-cp
并在命令行中显式命名主类
java -cp 'MyProgram.jar:libs/*' main.Main
(我使用的dir/*
语法告诉java
命令将.jar
特定目录中的所有文件添加到类路径中。请注意,*
shell必须保护其不被扩展,这就是我使用单引号的原因。)
您提到您正在使用Ant,因此对于替代清单方法,您可以在复制依赖<manifestclasspath>
项之后但在构建JAR 之前使用ant的任务。
<manifestclasspath property="myprogram.manifest.classpath" jarfile="MyProgram.jar"> <classpath> <fileset dir="libs" includes="*.jar" /> </classpath></manifestclasspath><jar destfile="MyProgram.jar" basedir="classes"> <manifest> <attribute name="Main-Class" value="main.Main" /> <attribute name="Class-Path" value="${myprogram.manifest.classpath}" /> </manifest></jar>
有了这个,java -jar MyProgram.jar
它将正常工作,并将包括libs
类路径上的所有JAR文件。
TA贡献1780条经验 获得超4个赞
当-jar
使用选项的-cp
选项将被忽略。设置类路径的唯一方法是在jar中使用manifest文件。
使用该-cp
选项更容易,将jar文件添加到该选项,然后显式调用主类。
此外,假设/home/user/java/MyProgram/jar/libs
文件夹包含jar文件(而不是类文件),这将不起作用。您不能指定jar文件的文件夹,但必须在类路径中单独指定每个jar文件(如果有大量的jar,则值得编写一个简单的shell脚本来为您执行此操作)。
TA贡献1779条经验 获得超6个赞
对于应用程序的快速一次性测试,您可以简单地将所需的依赖JAR文件符号链接到包含主应用程序JAR文件的目录中。
示例(对于app.jar
使用Eclipse SWT库的应用程序,在我的情况下安装在其中/usr/share/java
):
$ ln -s /usr/share/java/swt.jar . $ java -jar app.jar
添加回答
举报