コマンドラインからEclipse Javaプロジェクトをビルドする


118

コマンドラインからEclipseベースのJavaプロジェクトをコンパイルする方法はありますか?

私は(AntではなくFinalBuilderを使用して)ビルドを自動化しようとしていますが、JavaでもEclipseの専門家でもありません。たぶん、Javaコマンドラインオプションを使ってこれを行う方法を理解できるかもしれませんが、Eclipseプロジェクトは多くの無駄な努力のように感じられます。

コマンドラインを介してEclipseプロジェクトをコンパイルする方法がない場合、Eclipse内から必要なJavaコマンドラインを生成する方法はありますか?それとも裏で実行しているコンパイル手順を見つけるために私がぶらぶらできるいくつかのファイルはありますか?


みんな、アリを含まない答えを探しています。元の質問をもう一度繰り返しますが、コマンドラインからEclipseプロジェクトをビルドする方法はありますか?

ビジュアルスタジオで次のようなことができるので、これは不合理な質問ではないと思います。

devenv.exe /build "Debug|Any CPU" "C:\Projects\MyProject\source\MyProject.sln"

3
このためのプラグイン/ jarはありませんか?
キエーヴェリ2009

1
わかりました...新しい正解を追加しました。
キエーヴェリ2009

回答:


61

コマンドラインからワークスペースを介してEclipseプロジェクトをビルドできます。

eclipsec.exe -noSplash -data "D:\Source\MyProject\workspace" -application org.eclipse.jdt.apt.core.aptBuild

jdt aptプラグインを使用してワークスペースを自動的に構築します。これは「ヘッドレスビルド」としても知られています。わからない win32 exeを使用していない場合は、これを試すことができます。

java -cp startup.jar -noSplash -data "D:\Source\MyProject\workspace" -application org.eclipse.jdt.apt.core.aptBuild

更新

数年前の日食startup.jarは「equinoxランチャー」に置き換えられました

https://wiki.eclipse.org/Equinox_Launcher

Eclipse Mars(MacOX)の場合:

java -jar /Applications/Eclipse.app/Contents/Eclipse/plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar -noSplash -data "workspace" -application org.eclipse.jdt.apt.core.aptBuild

この-dataパラメーターは、ワークスペースの場所を指定します。

春分ランチャーのバージョン番号は、使用しているEclipseのバージョンによって異なります。


4
私はこのプロジェクトから離れて長い間、この回答が実際に機能するかどうかを確認できませんでしたが、受け入れられた回答をこの回答に変更しています。それは、Eclipseが実際にコマンドラインスイッチを備えていることを示しているためです。
キースG

3
たった1つの考え-これは既存のワークスペースでのみ機能するようです。これにより、たとえば、プロジェクトをソース管理からチェックアウトして、この方法でビルドすることが難しくなります。
ジョン

私のワークスペースはsvnリポジトリにコミットされていると思います。相対パス、または一致するディレクトリ構造がありました。
キエーヴェリ2015年

2
ビルド結果をどのように見ますか?私はこれを試し、「Building workspace」という出力を得ましたが、ビルドが成功したか失敗したかを示すことができませんでした。
Dikla 2011

コマンドラインのantスクリプトを使用してワークスペースを構築することもできます。help.eclipse.org/indigo/…を

22

Andréの答えを完成させるために、antソリューションは、Emacs、JDEE、Ant、およびEclipse Javaコンパイラーで説明されているようなものである可能性があります。

      <javac
          srcdir="${src}"
          destdir="${build.dir}/classes"> 
        <compilerarg 
           compiler="org.eclipse.jdt.core.JDTCompilerAdapter" 
           line="-warn:+unused -Xemacs"/>
        <classpath refid="compile.classpath" />
      </javac>

compilerarg要素を使用すると、追加のコマンドライン引数をeclipseコンパイラーに渡すこともできます。

あなたは見つけることができ、ここで、完全なAntスクリプトの例られるコマンドラインで呼び出されたとし:

java -cp C:/eclipse-SDK-3.4-win32/eclipse/plugins/org.eclipse.equinox.launcher_1.0.100.v20080509-1800.jar org.eclipse.core.launcher.Main -data "C:\Documents and Settings\Administrator\workspace" -application org.eclipse.ant.core.antRunner -buildfile build.xml -verbose

しかし、アリが関係するすべてのものは、キースが求めているものではありません。

バッチコンパイルについては、Javaコードのコンパイル、特に「バッチコンパイラの使用」のセクションを参照してください。

バッチコンパイラクラスは、JDTコアプラグインにあります。クラスの名前はorg.eclipse.jdt.compiler.batch.BatchCompilerです。plugins / org.eclipse.jdt.core_3.4.0..jarにパッケージ化されています。3.2以降、個別のダウンロードとして入手することもできます。ファイルの名前はecj.jarです。
3.3以降、このjarにはjsr199(コンパイラAPI)のサポートとjsr269(注釈処理)のサポートも含まれています。注釈処理サポートを使用するには、1.6 VMが必要です。

コマンドラインからバッチコンパイラを実行すると、

java -jar org.eclipse.jdt.core_3.4.0<qualifier>.jar -classpath rt.jar A.java

または:

java -jar ecj.jar -classpath rt.jar A.java

そのセクションでは、すべてのJavaコンパイルオプションについても詳しく説明しています。

Visual Studioのコマンドラインコンパイル機能との違いは、Eclipseがコマンドライン引数で.projectと.classpathを直接読み取らないように見えることです。まったく同じコンパイル結果を得るには、.projectおよび.classpathに含まれるすべての情報をさまざまなコマンドラインオプションで報告する必要があります。

つまり、簡単な答えは「はい、Eclipseはそうです」です。;)


2
ant4eclipseプロジェクトを使用してワークスペースをEclipseプロジェクトでコンパイルすることは可能ですが、抽出したメタ情報に基づいて必要なすべての手順を手動で実行する必要があるため、多くのエルボーグリースが必要です。私は社内プロジェクトのためにそれをしましたが、本当に必要でない限り、私はそれをお勧めしません!私たちは:-Dをしました
するThorbjörnRavnアンデルセン

@ThorbjørnRavn Andersen:このフィードバックをありがとうございます。また、ここに含まれる「エルボーグリース」の種類を示すこのスレッドに回答を投稿することもできます;)
VonC '06 / 07/06

まあ、私がant4eclipseに基づいて一緒にハッキングしたもの-これはprojectSet.psfファイルを必要とします-「実行可能なjarのエクスポート」機能をエミュレートするためには、かなりの答えはありません。また、それは、Eclipseを実行しているが、antを使用してEclipseをエミュレートされていません:D
するThorbjörnRavnアンデルセン

この古い答えに出くわしました。「Eclipse構成ファイルを使用してEclipseビルドをエミュレートする」は、長期的には脆弱すぎることがわかりました。そのようにしないように強くお勧めします。代わりにMavenプロジェクトを使用してください。
するThorbjörnRavnアンデルセン

1
@JeffPuckettIIありがとうございます。リンクを元に戻しました。
VonC 2016年

8

27年後、私もIDEでの開発に不安を感じています。私はこれらの提案(上記)を試しました-おそらく、すべてを正しく実行しなかったので、ウェブ検索を行ったところ、 ' http://incise.org/android-development-on-the- command-line.html '。

答えは上記のすべての答えの組み合わせのようです(私が間違っているかどうか教えてください、そうであれば私の謝罪を受け入れてください)。

上記のように、eclipse / adtは必要なantファイルを作成しません。日食IDEなしで(そしてantスクリプトを作成せずに)コンパイルするには:

1)最上位ディレクトリにbuild.xmlを生成します。

android list targets  (to get target id used below)

android update project --target target_id --name project_name  --path top_level_directory

   ** my sample project had a target_id of 1 and a project name of 't1', and 
   I am building from the top level directory of project
   my command line looks like android update project --target 1 --name t1 --path `pwd`

2)次に、プロジェクトをコンパイルします。「ant」を使わないようにという要求に少し戸惑いました。うまくいけば-リクエスターは、antスクリプトを記述したくないことを意味します。次のステップはantを使用してアプリケーションをコンパイルすることなので、これを言います

 ant target

    this confused me a little bit, because i thought they were talking about the
    android device, but they're not.  It's the mode  (debug/release)
    my command line looks like  ant debug

3)apkをデバイスにインストールするには、antを再度使用する必要がありました:

 ant target install

    ** my command line looked like  ant debug install

4)Androidフォンでプロジェクトを実行するには、adbを使用します。

 adb shell 'am start -n your.project.name/.activity'

    ** Again there was some confusion as to what exactly I had to use for project 
    My command line looked like adb shell 'am start -n com.example.t1/.MainActivity'
    I also found that if you type 'adb shell' you get put to a cli shell interface
    where you can do just about anything from there.

3A)補足:デバイスからログを表示するには、以下を使用します。

 adb logcat

3B)2つ目の注意:上記のリンクには、コマンドからプロジェクト全体をビルドするための指示も含まれています。

うまくいけば、これは質問に役立ちます。ここでこのトピックについて何かを見つけることができて本当に幸せでした。


1
プロジェクトが既にビルドされている場合(デバッグモードf.ex.)、ビルドant installdせずにインストールできます
serv-inc

4

通常のアプローチは他の方法で機能します。mavenまたはantに基づいてビルドを作成し、選択したIDEの統合を使用して、それから独立します。新しいチームメンバーをスピードアップしたり、自動化されたビルドに不便な統合サーバーを使用したりするときに重要です。私はmavenを使用することをお勧めします。pomファイルを作成し、mvn eclipse:eclipseを使用してEclipseプロジェクトを生成します。HTH


4
多くの場合、すべての開発者に動作を変更するように指示するのではなく、現在のワークフローをエミュレートする方がはるかに優れています。特に、Eclipseがantよりもはるかに速い場合。
–ThorbjørnRavn Andersen、2010

2

この質問には、ヘッドレスビルドに関するいくつかの便利なリンクが含まれていますが、それらは主にプラグインのビルドを対象としています。どれだけ純粋なJavaプロジェクトに適用できるかわかりません。


1

これに私の2セントを追加したかっただけです。@Kieveliが非win32(以下で繰り返す)に提案したように私はやってみましたが、それは私にとっては機能しませんでした(Eclipseを使用したCentOSでは:Luna):

java -cp startup.jar -noSplash -data "D:\Source\MyProject\workspace" -application org.eclipse.jdt.apt.core.aptBuild

Eclipse(Luna)を使用したCentOSでの私の特定のセットアップでは、これはうまくいきました:

$ECLIPSE_HOME/eclipse -nosplash -application org.eclipse.jdt.apt.core.aptBuild  startup.jar -data ~/workspace

出力は次のようになります。

Building workspace
Building '/RemoteSystemsTempFiles'
Building '/test'
Invoking 'Java Builder' on '/test'.
Cleaning output folder for test
Build done
Building workspace
Building '/RemoteSystemsTempFiles'
Building '/test'
Invoking 'Java Builder' on '/test'.
Preparing to build test
Cleaning output folder for test
Copying resources to the output folder
Analyzing sources
Compiling test/src/com/company/test/tool
Build done

なぜそれが二度それをしたのかはよくわかりませんが、うまくいくようです。


0

こんにちはVonCコメントに追加しました。ecjコンパイラーを使用してプロジェクトをコンパイルしています。一部のクラスが見つからないことは予想外でした。しかし、プロジェクトはjavacコンパイラーを使用して問題なく構築されていました。

だから私はクラスパスにクラスを追加しました(引数として渡す必要があります)そして今はうまくいきます... :)

クルビルシン


-3

短い答え。いいえ。Eclipseには、プロジェクトをビルドするためのVisual Studioのようなコマンドラインスイッチはありません。


5
短い答え:はい。Eclipseはそうです。あなたは、さまざまなコマンドラインオプションで.projectと.classpathに含まれるすべての情報を報告しなければならない場合を除き
VonC

他の応答で指摘されているように、antやmavenなどの外部(Eclipseへの)ビルドソリューションが通常これに使用されます。
JRローホーン2009
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.