好的,所以我有以下文件树:
<appfolder>
- MyApp.jar
- lib/
- log.jar
- someother.jar
- someother.jar
- someother2.jar
- config.properties
- otherfiles.extension
我已经尝试了几十种启动这个应用程序的方法。 MyApp包含以下内容
MANIFEST.MF:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.3
Created-By: 1.7.0_06-b24 (Oracle Corporation)
Main-Class: myapp.Main
Class-Path: MyApp.jar lib/*
如果我调用java -jar MyApp.jar,它总是说可以加载lib / log.jar中的所有类。
以下是我尝试过的组合的一部分:
- *.jar lib/*
- *.jar lib/*.jar
- *.jar ./lib/*.jar
- ./*.jar lib/*.jar
- *.jar ./lib/*.jar
- tbc
没有工作。 Java总是告诉我它找不到lib / log.jar中的类
我的下一次尝试是通过命令行指定类路径。
java -cp "MyApp.jar:lib/*" myapp.Main
但即使这样也行不通。在这种情况下,Java说它无法找到myapp.Main类。
我想我做的事情完全错了,因为我找不到任何方法。如果我把lib / log.jar中的类放到myApp.jar中并启动它就可以了。但这不是解决方案。
有任何想法吗?
编辑:我不想命名每个lib jar。我只希望ClassLoader在ClassPath中搜索所需的类。我见过这么多次。
对于Linux,您应该可以执行以下操作:
java -cp MyApp.jar:lib:someotherjar.jar myapp.Main
您可以(可选!)对包含“main”的.jar使用“-jar”,或者可以将路径和jar文件的任意组合(带有限定路径名的.jar文件)添加到类路径中。
我有同样的问题。
默认类路径是当前目录。设置CLASSPATH变量或使用-classpath命令行选项会覆盖该缺省值,因此,如果要在搜索路径中包含当前目录,则必须在新设置中包含点(。)。
通过系统变量或通过将lib目录添加到类路径中
SET CLASSPATH=%CLASSPATH%;MYAPP/LIB;.
然后做一个java -jar MyApp.jar