MakefileのJavaの

gnu make どのようにあなたのJavaプログラマはプログラムをコンパイルするために問題を抱えている様ですか? $アウトライブラリをCLASSPATHにパラメータは、Javaコンパイラキロに渡します。 も、Javaのための開発環境を使用して、状況は改善されません。 我々は、コンパイルいつも何かを実行するたびにparamteri設定するために多くの時間を過ごす!

単にJavaのソースを組織し、Makefileをその目的のために書かを使用して、これらすべての問題を回避することができます。

どのようなMakefileです

メイクは、私たちは、ツリーとそのすべての依存関係を取得するファイルを取得するefftuareするための手順を記述するファイルです。 それは広くのUnixで使用されるベースのプラットフォームと、各プログラムの種類をコンパイルするために使用することができます。 このユーティリティは、メイクファイルを解釈し、実行可能プログラムとライブラリのソースコードをコンパイルします

を使用しての利点

あなたがたの多くは、makefileのファイルの間には確かに、プロジェクトからプロジェクトに変化するすべての依存関係を指定する必要があるという単純な理由のため、それぞれのJavaプロジェクトのためのmakefileを使用して懐疑的だ。 そこで、メイクファイルごとに我々のプロジェクトのためのさまざまな記述があります。 この制限は、プロジェクトのすべての依存関係を計算することができる汎用的なmakefileを書くことでは、makefileのmoficare何もなく、すべてのプロジェクトのため、同じスクリプトを使用して完了することを克服することができます。

確かに利点は、内容のみを記入する必要があるようには無視できない。 してくださいすでに完了し、時間を大幅に節約して変更されていないことを回避できます。

場合は、プロジェクトのすべてのソースを構築することができます1つのメイクファイルと。

を使用する方法

メイクは、私を構築するために、特定のディレクトリ構造を持ってプロジェクトを変更せずに使用可能なJavaプロジェクトを書いている。 Javaのソース一のJava、1つのファイルです。クラスおよびライブラリのjarファイルのディレクトリがあるはず。
例:

  | - Srcの
 |` -メイン
 | | - Javaの
 | |` -コム
 | |` -例
 | | | - ExampleA.java
 | | | - ExampleB.java
 | |` - ExampleC.java
 |` -リソース
 |` - Res.java
 | -クラス
 | - libsは
 | | -一般的な
 | | | - [データベース]
 | | | | - DB1.jar
 | | |` - DB2.jar
 |` -ロギング
 |` - Log.jar
 | -ジャール

、ので、それを使用するだけで、プロジェクトのルートディレクトリにあるMakefile 以下のコードでは、ディレクトリの名前は、クラス(ファイルで指定されていることを確認を書いてみませんクラス;はsrc。LIBSのjavaファイルとjarファイル)との立ち上げコマンドmake
それはすべてです。 もし我々も、jarファイルだけmake && make jar実行し、プロジェクト全体を格納する

Makefileの

  
 #Makefileの
 #著者:ダニーAbbasciano
 

 #設定ここにクラスとソースのディレクトリ
 CLASS_DIR =クラス
 SOURCE_DIR =鉄骨
 JARS_DIR瓶=

 find $ ( SOURCE_DIR ) - name "*.java" - printf % h\\n | sort | uniq | sed 's/$(SOURCE_DIR) \/ \? //' ) SUBDIRS:$(シェル (SOURCE_DIR)$ =検索-名前"*. java"の - printfの%時間\ Nの|並べ替え| uniqは| s'の sedの/ $(SOURCE_DIR)\ / \?/ /')

 local / java / bin JAVA_HOMEを= / usr /ローカル/ Javaの/ binに

 フィールド#コンパイラ
 #JDEBUGFLAGS =-グラム- deprecation推奨
 JDEBUGFLAGS =#王-依存- nowarn
 ) / javac JCCの= $(JAVA_HOMEを)/ javacの

 clean classes compile jar 偽:jarファイルのクラスをコンパイルクリーン

 すべて:
	 SUBDIRS ) ; do \ $ @p(SUBDIRSを用)@;ありません\
		 p ; \ '$ $ コンパイル pエコー; \
		 $$ p ; \ エクスポート SUBD = $ ドル損益 ; \
		 print - directory compile ; \ -なし-印刷-ディレクトリ、コンパイルし、\完了した

 クリーン:
	 f * ~ *. class *. bak $ ( foreach dir ,$ ( SUBDIRS ) ,$ ( CLASS_DIR ) /$ ( dir ) /*. class ) - Rm - f *〜*. bakを*.クラス$(foreachのディレクトリ、$(SUBDIRSを)、$(CLASS_DIR)/ $(ディレクトリ)/ *.クラス)


 ) /$ ( SUBDIR ) LOCAL_CLASS_DIR = $(CLASS_DIR)/ $(SUBD)
 ) /$ ( SUBDIR ) LOCAL_SOURCE_DIR = $(SOURCE_DIR)/ $(SUBD)

 JARファイル:
	 ) ; jar - cf ../$ ( JARS_DIR ) / project . jar * $(CLASS_DIR)のcd;- CFの.. / $(JARS_DIR)/プロジェクトのjar *

 コンパイル:クラス

 が存在しない場合ディレクトリ対象のクラスを作成します#。
 ) : $(LOCAL_CLASS_DIR):
	 LOCAL_CLASS_DIR ) MkDir関数- (LOCAL_CLASS_DIR)ドル損益


 新しいルールのJava#の
 。SUFFIXES:
 java . class 。SUFFIXES:。Java の。クラス


 #魔法のコマンドは他のディレクトリにクラスファイルを見つけることが指示
 class $ ( LOCAL_CLASS_DIR ) vpathでは%クラス$(LOCAL_CLASS_DIR)
 java $ ( LOCAL_SOURCE_DIR ) vpathでは%の。java $(LOCAL_SOURCE_DIR)

 #クラスパスは、すべてインチ/ジャールと。/ LIBSに
 ) :$ ( SOURCE_DIR ) :$ ( subst . jar ,. jar :,$ ( wildcard libs /*. jar libs /*/*. jar libs /*/*/*. jar jars /*. jar ) ) LIBCLASSPATH:= $(CLASS_DIR):$(SOURCE_DIR):$(subst.壺。壺:、$(ワイルドカード LIBSに/ *. jarを LIBSの/*/*. jarファイルLIBSの/*/*/*.のjar jarファイルを/ * 。jarファイル))

 #Compilコマンド
 class : 。Javaの。クラス:
	 ) $ ( JCC ) - nowarn - d $ ( CLASS_DIR ) $ ( JDEBUGFLAGS ) $<をCLASSPATH = $(LIBCLASSPATH)$(JCCの) - nowarn -開発$(CLASS_DIR)$(JDEBUGFLAGS)$"

 #対象のファイルを表示して下さい
 $ ( LOCAL_SOURCE_DIR ) /*. java ) PATHFILES = $(ワイルドカード $(LOCAL_SOURCE_DIR)/ *. java)の
 $ ( LOCAL_SOURCE_DIR ) /,,$ ( PATHFILES ) )ファイル= $(SUBSTを $(LOCAL_SOURCE_DIR)/、、$(PATHFILES))
 java =. class ) クラス:$(ファイル:の。java =.クラス) 

コンパイルが良好です。

1つの応答のJavaのために"メークファイル"

  1. thegamer - 2009年8月28日

    私はアリを好む!
    それをみてください...

返信コメントを残す