Java Classpath让我发疯(找不到我的课程)

问题描述 投票:0回答:3

好的,所以我有以下文件树:

<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中搜索所需的类。我见过这么多次。

java classpath classloader manifest
3个回答
2
投票

对于Linux,您应该可以执行以下操作:

java -cp MyApp.jar:lib:someotherjar.jar myapp.Main

您可以(可选!)对包含“main”的.jar使用“-jar”,或者可以将路径和jar文件的任意组合(带有限定路径名的.jar文件)添加到类路径中。

这是Java documentation

这里有点better explanation


1
投票

我有同样的问题。

默认类路径是当前目录。设置CLASSPATH变量或使用-classpath命令行选项会覆盖该缺省值,因此,如果要在搜索路径中包含当前目录,则必须在新设置中包含点(。)。

oracle documentation


0
投票

通过系统变量或通过将lib目录添加到类路径中

SET CLASSPATH=%CLASSPATH%;MYAPP/LIB;.

然后做一个java -jar MyApp.jar

© www.soinside.com 2019 - 2024. All rights reserved.