又一个Classpath java

时间:2017-11-08 10:26:17

标签: java jar classpath javac

你好用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

由于

1 个答案:

答案 0 :(得分:0)

解决方案是使用。:DAWUtils.jar

引用DAWUtils.jar。

所以: $ javac -classpath。:DAWUtils.jar ./prova/ProvaUtils.java

工作然后:

$ java -classpath。:DAWUtils.jar prova.ProvaUtils

执行。