2016-07-25 2 views
0

パッケージ構造は私のコードでsrcフォルダがあり、その中にexecフォルダがありますクラスと3つのメソッド、私のメインクラスと2つの瓶。端末からのjarのコンパイル例外: "エラー:package au.com.bytecode.opencsvが存在しません" "

マイ幹部クラスは次のようになります。

package com.xxx.exec; 

import au.com.bytecode.opencsv.CSVReader; 


import java.io.*; 
import java.net.URL; 
import java.net.URLConnection; 
import java.net.URLEncoder; 
import java.nio.charset.StandardCharsets; 

/** 
* Created by xxx on 24/07/16. 
*/ 

public class ApiAccess { 

    public void getConsoleInput() throws Exception { 
     Console console = System.console(); 
     if (console == null) { 
      throw new Exception("Unable to fetch console"); 
     } 
     System.out.println("Please enter the location:"); 
     getAPIData(console.readLine()); 
    } 

    private void writeCsv(InputStream input) { 
     try { 
      CSVReader locationData = new CSVReader(new InputStreamReader(input)); 
      locationData.close(); 
      System.out.println(input); 
     } 
     catch (Exception e) { 
      System.out.println("Something went wrong while creating the csv:" + e); 
     } 

    } 

    private void getAPIData(String location) throws IOException { 
     String url = "http://exec.goeuro.com/exec/v2/position/suggest/en/"; 
     String charset = StandardCharsets.UTF_8.name(); 

     String query = String.format(url + "%s", URLEncoder.encode(location, charset)); 
     URLConnection connection = new URL(query).openConnection(); 
     connection.setRequestProperty("Accept-Charset", charset); 

//  String line; 
//  StringBuilder text = new StringBuilder(); 
//  BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); 
//  while((line = reader.readLine()) != null) { 
//   text.append(line).append(" "); 
//  } 
// 
//  writeCsv(text.toString()); 
     writeCsv(connection.getInputStream()); 

    } 
} 

マイターミナルコマンドは次のようになります。

javac -cp ".:lib/*:opencsv-2.41.jar" -d src $(find ./src/* | grep .java) 

そして、私はこのエラーを取得:

./src/com/goeuro/exec/ApiAccess.java:3: error: package au.com.bytecode.opencsv does not exist 
import au.com.bytecode.opencsv.CSVReader; 
          ^
./src/com/goeuro/exec/ApiAccess.java:29: error: cannot find symbol 
      CSVReader locationData = new CSVReader(new InputStreamReader(input)); 
      ^
    symbol: class CSVReader 
    location: class ApiAccess 
./src/com/goeuro/exec/ApiAccess.java:29: error: cannot find symbol 
      CSVReader locationData = new CSVReader(new InputStreamReader(input)); 
             ^
    symbol: class CSVReader 
    location: class ApiAccess 
3 errors 

は、事前にありがとう任意の答え!

現在のディレクトリ構造(私はディレクトリの前にバックスラッシュを置く):

/src > 
     -/com.xxx > 
       -Main.java, 
        -/exec > 
         -ApiAccess, 
         -opencsv-2.41.jar > 
             -/au.com.bytecode.opencsv, 
         -commons-lang3-3.0.1.jar 

enter image description here

+0

現在のディレクトリを基準にしたJARファイルの場所を表示してください。 –

+0

@StephenCちょっと、私は構造を追加しました:) – Ozymandias

+0

あなたがそれを修正するのを待っているので、それは1)読みやすく2)正確です。 –

答えて

0

私はまだ確信していないが、私はあなたのディレクトリ構造を理解しています。あなたのASCIIと画像は、あなたが少し夢中になっている(IMO)>> < <ディレクトリに深い3または4レベルのJARファイルを隠していると言っているようです。

代わりに、私は次のような構造を推奨します。

src/ 
    com/ 
     xxx/ 
      Main.java   // class name "com.xxx.Main" 
      exec/ 
       APIAccess.java // class name "com.xxx.exec.APIAccess" 
lib/ 
    opencsv-2.41.jar 
    commons-lang3-3.0.1.jar 
classes/ 
    com/ 
     xxx/ 
      Main.class 
      exec/ 
       APIAccess.class 

をコンパイルするクラスを次のように:

javac -cp "classes:lib/*" -d classes $(find src/* | grep .java) 

そして、このようなアプリケーションのように実行します。

java -cp "classes:lib/*" com.xxx.Main 

要点約:

  • "src"ツリー構造は、パッケージ名を指定する場所に表示されるJavaファイルを使用してパッケージ構造を反映する必要があります。
  • ように、「クラス」ツリーは別のものです:それはあなたがドン「の.class」ファイル
  • に「クリーン」は容易であるソースコード
  • ずにJARを作成することは容易である
    • 」 ".class"ファイルを偶然にバージョン管理することを心配する必要がありません。
  • 「クラス」ツリーは、当然ながらパッケージ構造を反映します。コンパイラがそれを処理します。
  • "lib"ディレクトリは "src"ツリーとは別のディレクトリです。
    • これは簡単です。
    • 上記のバージョンコントロールについての点。外部依存関係をバージョン管理にチェックすることは悪い習慣であることに注意してください。

(バージョン管理を使用していない場合は、あなたがそれを行う方法を学ぶ必要があります。それはあなたの傷の多くを保存します。また、Javaのビルド・ツールへの切り替えを見て。のようなツールを見てくださいMavenとGradleは外部依存関係をうまく処理できます)

関連する問題