你好用CLASSPATh和Java编译有点麻烦。
我有这个测试代码:
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,里面有.class的Log。如果你解压缩那个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并且无需解压缩就可以工作。所以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解压缩才能工作。正如你在Ubuntu Linux中看到的那样。
任何帮助都会被贬低。
按照要求:
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
由于
答案 0 :(得分:0)
解决方案是使用。:DAWUtils.jar
引用DAWUtils.jar。所以: $ javac -classpath。:DAWUtils.jar ./prova/ProvaUtils.java
工作然后:
$ java -classpath。:DAWUtils.jar prova.ProvaUtils
执行。