0

私は Java をめったに使用しないので、最新のエコシステムに関する私の知識は非常に限られています :(. 私の知る限り、Java はディレクトリ階層とファイル名に大きく依存しています: たとえば、「com.mycompany.myapp. WndMain" クラスの場合、対応する .class ファイルの名前は正確に "WndMain.class" (大文字と小文字を区別) にし、.jar ファイル (実際には .zip アーカイブ) 内の "com/mycompany/myapp" ディレクトリ ツリーに配置する必要があります。

しかし、アプリケーションを開発している間、ソース コードファイルに CamelCase という名前を付けて、いくつかのディレクトリ ツリーに散らばらせたくありません。結局のところ、それは私のソースコードです。は、愚かなコンパイラやアーカイバのためではなく、ファイルを快適に操作できるようにファイルを整理することを好みます:)。「wnd_main.java」、「wnd_about.java」などのファイルを含むクリーンな「src」フォルダーが必要です。実際のソース コードの内容に基づいて、コンパイル中に正しいファイル名とディレクトリ構造を自動的に生成する簡単な方法はありますか?

もちろん、「.java」ファイルのコンテンツを読み取り、「using」および「class」ディレクティブを解析し、ディレクトリ構造を作成し、ファイルをコピーし、コンパイルなどを行う、Python、Ruby、Shell などを介して独自のスクリプトを作成できます。 ..しかし、おそらくこれはすべて何年も前に行われており、必要なのは「sudo apt-get install javamake」のようなものだけですか? :)

4

5 に答える 5

0

パッケージに一致するディレクトリ構造にファイルを厳密整理する必要はありません-ファイルはそのような構造である必要がありますが、ファイルのフラットな構造を受け入れます-しかし、そうすることであなたの生活ははるかに楽になります世界中のすべての高レベルのJavaツールは、この規則に従うことを期待しています。たとえば、Antは、ディレクトリ構造とディレクトリ構造の照合に依存して、対応するファイルに関してどのファイルが古くなっているかを判断できます。構造が一致しない場合は、毎回すべてのファイルを再コンパイルします。.java.classjavac.java.java.class.class.java.java

ただし、各.javaファイルの名前は、それが定義する名前と一致する必要public classがあります(1つのファイルに複数のクラスを含めることができ.javaますが、最大で1つにすることができpublic、その名前はファイル名と一致する必要があります)。これはコンパイラの要件であり、戦う価値はありません。

于 2012-09-07T17:08:21.550 に答える
0

package com.mycopmany.myappいいえ、コンパイラでは、ファイル内で宣言されたパッケージ名 ( など) がディスク上の実際のディレクトリ構造と一致しないクラスを宣言できません。

srcこれは、階層内にディレクトリが存在しないようにするために、多くの作業を行うように思えます。

于 2012-09-07T16:52:33.340 に答える
0

@mattbが言ったように、各ソースファイル内のパッケージ名はディレクトリ構造と同じでなければならないため、難しい作業になりますが、Ant(最も使用されているツール)などのビルドツールを使用して、探しているソリューションを作成できます為に。

たとえば、ソースを次のように整理している場合:

src
    foo
        class_1.java
        class_2.java
    bar
        class_3.java
        class_4.java

Ant を使用してすべてのソース ファイルを一時ディレクトリにコピーし、コンパイルしてから .jar にパッケージ化できます。ディレクトリ)。すべてのクラスには異なる名前を付ける必要があり、すべてのクラスは同じパッケージ内にあるため、相互にアクセスする必要があります。この問題はすべて、私が提案する解決策に関連しています。もちろん、一時ディレクトリにコピーされたファイルのコードを変更することはできますが、これをすべて試す価値があるとは本当に思いません...「開発方法」に従うことを心からお勧めしますJava、いくつかの IDE を使用し、Java Code Conventionsなどに従います。

于 2012-09-07T16:55:01.083 に答える
0

これは無意味です。ここで質問を見つけるのは難しいです。
しかし、私は答えようとします:

  1. Java では、クラス名に従ってファイルを厳密に編成する必要があります。インデントを強制
    する Python について考えてみてください。これは 、インデントに関連するコーディング規則の必要性を排除するために行われます。
  2. タイプの状況を防ぐために、これはあなた自身の利益のためにこれを行います:

    このような大きなプロジェクトでこのクラスを見つけるにはどうすればよいですか?
    すでに存在するクラス/機能を書いていたことがわかりました。
    このプロジェクトでは、ファイルをどのように整理すればよいですか? 何かコンベンションはありますか?
    何?!1 つのファイルに 100 個のクラスが定義されていますか?

  3. ファイルとディレクトリ構造を手動で操作したくないですか?
    IDE を使用すると、それが行われます。

  4. それでも Java の柔軟性が必要な場合は、Java ベースの言語を試してみませんか?
    たとえば、Groovy のように。または Clojure、または Scala、または...
    それらはすべて JVM で動作し、それらの構文は Java と互換性がありますが、よりリラックスした寛容な. 同じことがディレクトリ構造にも当てはまります。ボーナス!Groovy スクリプトと Java クラスを混在させることができます。

下の注:実際には、非パブリック クラスはこの規則に従う必要はありません
何らかの奇妙な理由で、あるクラスをpackage accessで宣言する
ことにした場合、 package の外部からはアクセスされませんが、必要な名前を付けることができます。

于 2012-09-07T16:58:17.243 に答える
0

sconsビルド システムは、ファイルの内容に従ってディレクトリ構造を完全に作成し.javaます。インストールは簡単pypm -g install sconsです。

于 2012-09-07T22:08:06.903 に答える