相关疑难解决方法(0)

将所有jar包含在Java类路径中的目录中

有没有办法在类路径中的目录中包含所有jar文件?

我正在尝试java -classpath lib/*.jar:. my.package.Program,它无法找到肯定在那些罐子里的类文件.我是否需要将每个jar文件分别添加到类路径中?

java command-line classpath

968
推荐指数
16
解决办法
100万
查看次数

尝试使用java.exe -jar运行我的jar时出现NoClassDefFoundError ...出了什么问题?

我有一个应用程序,我正在尝试将其包装到jar中以便于部署.当作为一组可从CLASSPATH访问的类运行时,应用程序编译并运行正常(在Windows cmd窗口中).但是当我在我的类中运行并尝试在同一cmd窗口中使用java 1.6运行它时,我开始获得异常:

C:\dev\myapp\src\common\datagen>C:/apps/jdk1.6.0_07/bin/java.exe -classpath C:\myapp\libs\commons -logging-1.1.jar -server -jar DataGen.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    at com.example.myapp.fomc.common.datagen.DataGenerationTest.<clinit>(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
    ... 1 more
Run Code Online (Sandbox Code Playgroud)

有趣的是,违规的LogFactory似乎是在commons-logging-1.1.jar中,它位于指定的类路径中.jar文件(是的,它确实存在):

C:\dev\myapp\src\common\datagen>dir C:\myapp\libs\commons-logging-1.1.jar
 Volume in drive C is Local Disk
 Volume Serial Number is ECCD-A6A7

 Directory of C:\myapp\libs

12/11/2007  11:46 AM            52,915 commons-logging-1.1.jar
           1 File(s)         52,915 bytes
           0 Dir(s)  10,956,947,456 bytes free
Run Code Online (Sandbox Code Playgroud)

commons-logging-1.1.jar文件的内容:

C:\dev\myapp\src\common\datagen>jar -tf C:\myapp\libs\commons-logging-1.1.jar
META-INF/
META-INF/MANIFEST.MF
org/ …
Run Code Online (Sandbox Code Playgroud)

java jar classpath executable-jar

56
推荐指数
3
解决办法
12万
查看次数

项目中的罐子的文件夹

当我处理小型桌面项目时,我曾经lib在项目的根目录中创建文件夹,在那里我保留了所有项目的jar依赖项.然后我使用配置构建路径 - > - > 添加JAR ...来手动将此文件夹中的所有jar添加到buildpath/classpath.而且因为添加JAR ...(与添加外部JAR不同)使用相对路径,项目是可移植的,这对我来说很重要.

问题是每次我从我的lib文件夹中添加或删除一个jar时,我需要在项目构建路径设置中手动添加/删除这个jar(当然我经常忘记这样做).

有没有办法告诉Eclipse"这是我保存所有罐子的文件夹.请将所有罐子自动添加到buildpath/classpath"?我试图将此文件夹视为类文件夹(Add class folder...),但它不起作用:(.

PS我知道Maven和Eclipse-Maven集成,但我想保持我的小项目很简单(Maven集成有时令人沮丧,所以我宁愿在这些项目中避免它),所以请不要在回答中提出这个建议.另外正如我所提到的,这些是桌面项目,因此WEB-INF/lib我的项目中没有通常由Java EE插件自动处理的文件夹.

eclipse configuration classpath buildpath

14
推荐指数
1
解决办法
1万
查看次数

从另一个jar文件访问资源

我有一个简单的结构:一个包含一批数据的数据jar文件,以及一个使用该数据运行服务的服务jar文件.为了使数据易于替换,我将它们分开,service.jar的classpath包含data.jar所在的目录.

在service.jar中,我使用getResource来加载数据文件.如果数据文件直接位于文件夹中,但是当它们位于data.jar内时失败,则此方法有效;

这失败了:

all
+ globalclasspath
| + data.jar
|   + mine.properties
+ daemons
  + service.jar

jsvc -cp globalclasspath:daemons/service.jar (...)

MyClass.class.getClassLoader( ).getResource( "mine.properties" ); // <-- null
Run Code Online (Sandbox Code Playgroud)

但这有效:

all
+ globalclasspath
| + mine.properties
+ daemons
  + service.jar

jsvc -cp globalclasspath:daemons/service.jar (...)

MyClass.class.getClassLoader( ).getResource( "mine.properties" ); // <-- not null
Run Code Online (Sandbox Code Playgroud)

我不想更改类路径(除非我可以将它改为通用的,不依赖于数据jar文件的名称),但是我可以更改getResource字符串(我试过/数据) /mine.properties和/data.jar/mine.properties无济于事.我可以进行更改,以便可以从jar中加载资源吗?

java classpath jsvc

12
推荐指数
1
解决办法
1万
查看次数

在java classpath中使用通配符

我正在运行一个应该执行main方法的shell脚本:

java -classpath /path/to/app/conf/lib/nameJar* com.example.ClassTest
Run Code Online (Sandbox Code Playgroud)

在这一点上,我得到了这个例外:

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
Run Code Online (Sandbox Code Playgroud)

这是因为弹簧罐位于另一个文件夹中.所以我改变了脚本:

java -classpath /path/to/app/conf/lib/nameJar*:/path/to/app/lib/spring* com.example.ClassTest
Run Code Online (Sandbox Code Playgroud)

但是使用此脚本,无法找到com.example.ClassTest.关于这个问题的任何想法?

提前致谢

java wildcard classpath

8
推荐指数
1
解决办法
1万
查看次数

如何在 Maven 项目中处理 CLASSPATH?

我正在尝试使用 Log4J ver 2-beta 9 的简单 Maven 应用程序。在我的 pom.xml 文件中,我有这两个依赖项(如Log4J Maven 网页中所述):

<dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.0-beta9</version>
</dependency>
<dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.0-beta9</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

Eclipse 看到 Log4J 库:

在此处输入图片说明

但是当我打包应用程序并运行它时,会抛出这个异常:

java -cp target/notification-1.0.0.jar com.example.Sandbox

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/LogManager
    at com.example.Sandbox.<clinit>(Sandbox.java:13)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.LogManager
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 1 more
Run Code Online (Sandbox Code Playgroud)

我搜索了这个异常,它似乎与 CLASSPATH 变量有关。

应该如何为 Maven 项目设置 CLASSPATH?

java classpath maven

8
推荐指数
1
解决办法
2万
查看次数

将多个jar文件添加到类路径中

我想在下面的目录中添加所有jar文件,但我得到了

线程"main"中的异常java.lang.NoClassDefFoundError:twitter4j/TwitterException错误.

我确信.jar文件中有TwitterException类.我的classpath语法中是否有任何错误?

mahmut@ubuntu:~/Desktop/Java/TwitterDeneme/bin$ java -classpath "~/twitter4j-2.2.6/lib/*.jar:." GetHashtag
Exception in thread "main" java.lang.NoClassDefFoundError: twitter4j/TwitterException
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2442)
    at java.lang.Class.getMethod0(Class.java:2685)
    at java.lang.Class.getMethod(Class.java:1620)
    at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:488)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:480)
Caused by: java.lang.ClassNotFoundException: twitter4j.TwitterException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    ... 6 more
Run Code Online (Sandbox Code Playgroud)

我正在使用ubuntu和jdk 1.7.我在Windows中尝试了相同的命令,它完美无缺.有什么特别的事情要做与Ubuntu OS有关吗?

java ubuntu classpath

0
推荐指数
1
解决办法
6339
查看次数