0

私は長い間、悪い慣行が他の悪い慣行の上に積み重なったビルドシステムに取り組んでおり、ビルドを書き直しているところです。関連する言語は C/C++、Fortran、Ada、および Java であり、当面は GNU スタイルの makefile を使用しますが、SCons などの他の代替手段を検討しています。

そうは言っても、「別のビルドシステムを使用する」などの形式の推奨事項ではなく、いくつかの特定の推奨事項を探しています。

私が今見ている特定のメイクファイルを作成した人は誰でも、次のような Java コードの順次ビルドを計画していました。

LIST_OF_JAVA_FILES  = file1.java
LIST_OF_JAVA_FILES += file2.java
LIST_OF_JAVA_FILES += file3.java
...
LIST_OF_JAVA_FILES += fileN.java

all: ${LIST_OF_JAVA_FILES}

${LIST_OF_JAVA_FILES} : %.class : %.java
  ${JAVAC} ${CLASSPATH} ${<}

シリアルでビルドを実行する場合、これは正常に機能します。ただし、依存関係が混在するとすぐに、問題が大きくなります。

  1. C/C++ コンパイラには、依存関係を生成するためのオプションが組み込まれています。Java にも同様の機能はありますか?
  2. 依存関係を生成するためにサードパーティのツール (Jikes など) を使用する必要がありますか?
  3. 一般的に言えば、チームが Java 関連のものをビルドするために makefile を使用している場合、Java コンパイラを 1 回呼び出して、すべての.javaファイルを 1 つのコマンドラインでリストするのと、ファイルごとに 1 つのターゲットを指定するのとでは、どちらがより一般的.classでしょうか?
    • これがより一般的である場合、これは厳密に単純化のためですか、それとももっと深い理由がありますか?
    • 注:順次ビルドの場合、これがより高速なオプションであることは理解していますが、並列ビルドの経験的テストを行うための回答が必要です
4

3 に答える 3

1

私たちのプロジェクトでも同様の問題がありました。すべての Java コードを ant 経由でビルドし、makefile からantを呼び出すことにしました。

多くの JNI (c++ <----> Java) 依存関係がない限り、これもうまくいくかもしれません。

幸運を。

于 2011-09-01T16:28:22.000 に答える
0

javac単一のビルドステップですべてのソースファイルを指定し、すべての依存関係をそのように解決できるようにすることが、最終的に最も好都合な (そして Java 開発全体の標準) になりました。

于 2011-09-12T17:11:20.047 に答える
0

のようなことをする

javac -cp MY_CLASSPATH Main.java

依存関係は自動的に解決されるため、ほとんどの場合はこれで十分です。一部のファイルは明示的な参照なしで使用される場合があるため、コマンドラインでさらに多くのファイルを使用する必要がある場合があります。

antand mavenand and and anythingもありますがivy、単純なものにしてはやり過ぎです。

于 2011-09-01T16:24:05.130 に答える