你好,我遇到了一些CLASSPATh和编译方面的问题。
我有这个测试代码:
package prova;
import cat.almata.daw.utils.Log;
public class ProvaUtils {
public static void main(String[] args) {
try{
System.out.println("------ Testing DAW Utils ---");
System.out.println("--- Testing Log class ---");
Log logTest = new Log("logTest.log");
System.out.println("Going to write an Info");
logTest.info("Some information to write in the log");
System.out.println("Going to write a Warning");
logTest.warning("Some warning to write in the log");
System.out.println("Going to write an Error");
logTest.error("Some error to write in the log");
System.out.println("Hola Mon");
}catch(Exception e){
//System.out.println("An Exception has been thrown, with message:" + e.getMessage());
e.printStackTrace();
}
}
}所以我得到了一个DAWUtils.jar,它包含在Log的.class中。如果解压缩这个jar,就会得到路径cat -> almata -> daw -> utils -> Log.class。
所以我需要Log.class来执行我的测试代码。
我的文件夹:
practicaJava/
├── DAWUtils.jar
├── MANIFEST.MF
├── prova
│ ├── ProvaUtils.java当我想编译和执行(使用Jar)时:
eduardo@MiPcLinux:~/Descargas/practicaJava$ javac -classpath "/home/eduardo/Descargas/practicaJava/DAWUtils.jar" ./prova/ProvaUtils.java
eduardo@MiPcLinux:~/Descargas/practicaJava$ java prova.ProvaUtils ------ Testing DAW Utils ---
--- Testing Log class ---
Exception in thread "main" java.lang.NoClassDefFoundError: cat/almata/daw/utils/Log
at prova.ProvaUtils.main(ProvaUtils.java:13)
Caused by: java.lang.ClassNotFoundException: cat.almata.daw.utils.Log
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more如果我在同一个文件夹中解压jar,它就能正常工作;
$jar xvf DAWUtils.jar
并具有:
eduardo@MiPcLinux:~/Descargas$ tree practicaJava/
practicaJava/
├── cat
│ └── almata
│ └── daw
│ └── utils
│ └── Log.class
├── DAWUtils.jar
├── MANIFEST.MF
├── META-INF
│ └── MANIFEST.MF
└── prova
└── ProvaUtils.java我正在运行我的文件夹practicaJava中的所有指令。所以它不应该以这种方式工作,我认为如果我有jar文件,它必须获得Log.class并在不需要解压缩的情况下工作。所以我把它解压,放在DAWUtils.jar里面
我还需要制作一个jar (包括MAnifest.mf中的.jar ),但由于同样的原因,它不能工作:
$jar cvfm ProvaUtils.jar MANIFEST.MF prova/ DAWUtils.jar
使用Manifest.mf:
Manifest-Version: 1.0
Created-By: 1.5.0_06 (BEA Systems, Inc.)
Main-Class: prova.ProvaUtils
Class-Path: /home/eduardo/Descargas/practicaJava/DAWUtils.jar似乎我需要将DAWUtils.jar解压成work.As,你可以在Ubuntu Linux中看到im。
任何帮助都会被感谢。
应以下方面的要求:
eduardo@MiPcLinux:~/Descargas/practicaJava$ javac -classpath "/home/eduardo/Descargas/practicaJava/prova/DAWUtils.jar" ./prova/ProvaUtils.java
eduardo@MiPcLinux:~/Descargas/practicaJava$ java prova.ProvaUtils ------ Testing DAW Utils ---
--- Testing Log class ---
Exception in thread "main" java.lang.NoClassDefFoundError: cat/almata/daw/utils/Log
at prova.ProvaUtils.main(ProvaUtils.java:13)
Caused by: java.lang.ClassNotFoundException: cat.almata.daw.utils.Log
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more谢谢
发布于 2017-11-08 20:37:50
解决方案是使用.:DAWUtils.jar引用DAWUtils.jar
所以:$ javac -classpath .:DAWUtils.jar ./prova/ProvaUtils.java
工作,然后:
$ java -classpath .:DAWUtils.jar prova.ProvaUtils
去执行。
https://stackoverflow.com/questions/47177215
复制相似问题