2017-11-29 9 views
0

私はjavaでパッケージのコンセプトを試していました。それがうまくコンパイルが、.classを作成しませんパッケージステートメントを取ったのにフォルダ構造が作成されないのはなぜですか?

javac -d . Test.java 

:私のようにコマンドを使用してファイルをコンパイルするとき

package pack1; 

は、私は単一のステートメントが含まれている Test.javaファイルを作成しましたまた、 pack1という名前のフォルダもありません。

なぜわからないのですか?誰でもお勧めしますか?私は、コードを変更した場合

package pack1; 
class Test{} 

とコマンド

javac -d . Test.java 

を使用してプログラムをコンパイルするには、その後、それが正常にコンパイルし、フォルダ構造も正しく作成されています。

なぜこのように起こるのか教えてください。

+0

有効な '.class'ファイルにコンパイルするだけではパッケージの宣言が不十分です... –

答えて

3

元のコードでは、クラスが宣言されていないため、は、はクラスファイルではありません。クラスファイルがない場合、おそらくとなるディレクトリ構造を作成する必要はありません。となります。

実際には、クラス情報のないJavaソースファイルは、パッケージ情報用でしか見られませんでした。パッケージにクラスがない場合はそれほど意味がありませんが、実行するとjavadocは、空のパッケージのエントリを作成します。コメントに記載されているように、パッケージ注釈は、クラスファイルの作成を終了しますが、それらはpackage-info.javaになければなりません。たとえば、次のように必要に応じて、それのためのディレクトリを作成し、package-info.classを作成します

// In package-info.java 
@Deprecated 
package foo; 

コンパイル。

+0

パッケージレベルをお持ちの場合、" package-info.java "をコンパイルしてjavacが.classファイルを生成しますその中の属性。 –

+0

@PeteKirkham:ここでどのような「属性」を意味していますか? Javadocのコメントだけでは起こりそうにないようです。パッケージアノテーションを意味しますか? –

+0

@PeteKirkham:アノテーションの回答を編集しました。 –

関連する問題