我编译了一个JAR文件,并在清单中指定了Main-Class(我使用了Eclipse Export函数) . 我的依赖项都在一个标记为 lib
的目录中 . 我似乎无法直接回答如何执行我的JAR文件,同时指定它应该使用 lib/*
作为类路径 .
我试过了:
]$ java -jar -cp .:lib/* MyJar.jar
]$ java -cp .:lib/* -jar MyJar.jar
]$ java -cp .:lib/* com.somepackage.subpackage.Main
等等...
每个都给出一个错误说:
错误:无法找到或加载主类....
或者给出 NoClassDefFoundError
表示未找到库 .
我甚至尝试重新制作JAR文件并包含 lib
目录和内容,但仍然没有骰子......
如何从命令行执行JAR文件并指定要使用的类路径?
4 回答
指定
-jar
时,将忽略-cp
参数 .来自the documentation:
您也不能将所需的jar文件“包含”到另一个jar文件中(您需要提取其内容并将.class文件放入您的jar文件中)
您有两种选择:
将
lib
目录中的所有jar文件包含到清单中(您可以在那里使用相对路径)使用
-cp
在命令行上指定所有内容(包括jar):java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main
运行jar文件并指定类路径,如下所示:
jar_name.jar
是您要执行的JAR的全名libs/*
是依赖项JAR的路径com.test.App
是具有main(String[])
方法的JAR中类的完全限定名称jar和依赖jar应该具有执行权限 .
您可以在unix shell中执行以下操作:
你可以在windows powershell中做到这些:
或者,如果您愿意,可以使用清单指定类路径和主类,因此您不需要使用
-cp
或指定主类 . 在你的情况下,它将包含这样的行:不幸的是,你需要拼出清单中的每个jar(不是一个biggie,因为你只做一次,你可以使用脚本来构建文件或使用像ANT或Maven或Gradle这样的构建工具) . 并且引用必须是运行
java -jar MyJar.jar
的相对或绝对目录 .然后执行它