Java -jar 選項與 -cp/-classpath

今天遇到一個問題,我雖然把所有的引用到的jar文件都放到了 -cp選項裡,但是我仍然無法運行jar文件:

jar -cp lib/referenced.jar -jar myworks.jar

後來到網上查閱了一下,發現如果我們使用-jar選項的話java.exe會忽略-cp,-classpath,以及環境變量CLASSPATH的參數。

解決方法如下: 1>不要使用-jar選項,直接調用含有main方法的class文件,這樣-cp,-classpath以及環境變量裡的CLASSPATH指定的參數就都能使用到了。

java -classpath ./lib/junit.jar:. test/Test1

2>繼續使用-jar選項,但是在MAINFEST.MF文件中指定引用到jar文件.

Class-Path: myplace/myjar.jar myplace/other.jar jardir/

另外說明一點,這個問題可能有些人遇不到,因為Java的版本不同的原因,我在Sun的JDK和IBM 1.5的JDK都遇到了這個問題,但是對於 IBM 1.4的JDK卻沒有類似問題。


javac -d out/ ../../../src/c0/singleton/*.java SingletonTest.java
java -cp ./out/ c0.singleton.SingletonTest
javac -d out/ -cp /usr/share/java/junit4-4.12.jar ../../../src/c01/simpleFactory/village/*.java *.java

使用junit測試java程序方法

java -classpath .:/usr/share/java/junit4-4.12.jar org.junit.runner.JUnitCore HelloWorldTest

// HelloWorld.java
import java.util.*;
public final class HelloWorld
{
    private String str;
    public static void main(String[] args)
    {
        HelloWorld  hw = new HelloWorld();
        hw.hello();
        System.out.println(hw.str);
    }
    public void hello()
    {
        str = "Hello World!";
    }
    public String getStr()
    {
        return str;
    }
}
// HelloWorldTes.java
import static org.junit.Assert.*;
import org.junit.Test;
public class HelloWorldTest
{
    public HelloWorld helloworld = new HelloWorld();
    @Test
    public void testHello()
    {
        helloworld.hello();
        assertEquals("Hello World!",  helloworld.getStr());
    }
}
javac -d . -cp /usr/share/java/junit4-4.12.jar *.java

java -classpath .:/usr/share/java/junit4-4.12.jar org.junit.runner.JUnitCore HelloWorldTest