2016-08-25 16 views
0

dirctory /home/wangmingにして、私は単純なJavaソースTest.javaは:。./* Javaクラスパス

import com.alibaba.fastjson.JSONObject; 
import java.util.concurrent.TimeUnit; 
public class Test { 
    public static void main(String[] args) throws InterruptedException { 
     JSONObject json = new JSONObject(); 
     TimeUnit.HOURS.sleep(1); 
    } 
} 

を書いて、私は(ディレクトリのintクラスパスをfastjson-1.2.11.jarを置きます)、その後、私は実行

[[email protected] wangming]# javac -cp ./* Test.java 
javac: invalid flag: ./Test.class 
Usage: javac <options> <source files> 
use -help for a list of possible options 
[[email protected] wangming]# javac -cp . Test.java 
Test.java:2: error: package com.alibaba.fastjson does not exist 
import com.alibaba.fastjson.JSONObject; 
         ^
Test.java:9: error: cannot find symbol 
       JSONObject json = new JSONObject(); 
       ^
    symbol: class JSONObject 
    location: class Test 
Test.java:9: error: cannot find symbol 
       JSONObject json = new JSONObject(); 
            ^
    symbol: class JSONObject 
    location: class Test 
3 errors 
[[email protected] wangming]# javac -cp .:./ Test.java 
Test.java:2: error: package com.alibaba.fastjson does not exist 
import com.alibaba.fastjson.JSONObject; 
         ^
Test.java:9: error: cannot find symbol 
       JSONObject json = new JSONObject(); 
       ^
    symbol: class JSONObject 
    location: class Test 
Test.java:9: error: cannot find symbol 
       JSONObject json = new JSONObject(); 
            ^
    symbol: class JSONObject 
    location: class Test 
3 errors 
[[email protected] wangming]# javac -cp .:./* Test.java 

のみjavac -cp .:./* Test.javaは正常に実行され、なぜ???

答えて

1

.は現在のディレクトリのすべてのクラスを意味し、./*は現在のディレクトリのすべてのjar/zipファイルを参照することを意味します。

Jean-Francoisも指摘しているように、./*だけをディレクトリ内のすべてのファイルに展開できます。

プロジェクトをセットアップしてビルドするには、IDEとmaven/gradleのようなビルドツールを使用することを強くお勧めします。ビルド/実行の仕方ではなく、コードの作成に集中します。

javac -cp .:./* Test.java 

は、シェルの試合を無効にし、シェルが解釈しない:

+1

特に、IDEが再コンパイルを回避する良い機会を持つためです。ここでは問題はありませんが、大きなプロジェクトでは時間がかかることがあります(IDEや複雑なビルダーを使用せずにすべてを最初からやるシンプルなシェルファイルを持つのは良いことですが) –

+0

シェルスクリプトが行うtirivalプロジェクトの@ Jean-FrançoisFabre私のIDEで生成された単純なmaven pom.xmlを追加して、後で簡単に追加することができます。 –

+0

これは知っておきたいことです。どうも –

2

問題は、Unix/Linuxのシェルは、あなたが何を行うインスタンス./Test.java

のために一致したものに./*を展開していることですワイルドカード=>それは動作します。

javac -cp "./*" Test.java 

注:それは同様に機能するであろうことを意味し

窓の側の問題はないが、WindowsシェルはワイルドカードにLinuxは/ UN * Xない方法を展開しません。