2008-10-15 8 views
112

Gibt es eine Möglichkeit, ein Eclipse-basiertes Java-Projekt über die Befehlszeile zu kompilieren?Eclipse-Java-Projekt über die Befehlszeile erstellen

Ich versuche, meinen Build zu automatisieren (mit FinalBuilder nicht ant), und ich bin weder ein Java noch Eclipse-Experte. Ich kann wahrscheinlich herausfinden, wie man das mit geraden Java-Befehlszeilenoptionen macht, aber dann fühlt sich das Eclipse-Projekt wie eine Menge verschwendeter Aufwand an.

Falls es keine Möglichkeit gibt, ein Eclipse-Projekt über die Befehlszeile zu kompilieren, gibt es eine Möglichkeit, die erforderliche Java-Befehlszeile in Eclipse zu generieren? Oder gibt es einige Dateien, die ich durchsuchen kann, um die Kompilierungsschritte hinter den Kulissen zu finden?


Leute, ich bin auf der Suche nach einer Antwort, die tut NICHT Ameise enthalten. Lassen Sie mich die ursprüngliche Frage wiederholen ... Gibt es eine Möglichkeit, ein Eclipse-Projekt über die Befehlszeile zu erstellen?

Ich glaube nicht, dass dies eine unzumutbare Frage gegeben ist, dass ich so etwas wie dies für Visual Studio tun können:

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

Wie gibt es dafür kein Plugin/Jar !! – Kieveli

+1

Ok ... Ich habe eine neue richtige Antwort hinzugefügt. – Kieveli

Antwort

55

Sie können ein Eclipse-Projekt über eine bauen Arbeitsbereich von der Befehlszeile:

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

Es nutzt die jdt apt Plugin Ihren Arbeitsbereich automatisch zu bauen. Dies wird auch als "Headless Build" bezeichnet. Verdammt schwer, das herauszufinden. Wenn Sie nicht eine win32 exe verwenden, können Sie dies versuchen:

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

aktualisieren

Vor einigen Jahren ersetzt startup.jar mit dem "Tagundnachtgleiche Launcher" eclipse

https://wiki.eclipse.org/Equinox_Launcher

Auf 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 

Der Parameter -data gibt den Standort Ihres Arbeitsbereichs an.

Die Versionsnummer für den Tagundnachtgleichen-Launcher hängt davon ab, welche Version von Eclipse Sie haben.

+3

Obwohl ich schon lange von diesem Projekt entfernt bin und nicht überprüfen kann, ob diese Antwort tatsächlich funktioniert oder nicht, ändere ich die akzeptierte Antwort auf diese. Weil es anzeigt, dass Eclipse tatsächlich einen Befehlszeilenschalter hat. –

+3

Nur ein Gedanke - scheint nur für bereits vorhandene Arbeitsbereiche zu funktionieren. Ich denke, das macht es schwierig, das Projekt beispielsweise aus der Quellcodeverwaltung auszuchecken und so zu erstellen. – John

+0

Ich glaube, mein Arbeitsbereich wurde an das SVN-Repository gebunden. Es hatte entweder relative Pfade oder übereinstimmende Verzeichnisstrukturen. – Kieveli

2

Der normale apporoach andersrum funktioniert um: Sie erstellen Ihr Build basiert auf maven oder ant und dann Integrationen für Ihre IDE der Wahl, so dass Sie unabhängig davon sind, die es besonders ist. wichtig, wenn Sie versuchen, neue Teammitglieder auf den neuesten Stand zu bringen oder einen Contio-Integrationsserver für automatisierte Builds zu verwenden. Ich empfehle, Maven zu benutzen und es für Sie schwer zu heben. Erstellen Sie eine Pom-Datei und generieren Sie das Eclipse-Projekt über mvn eclipse: eclipse. HTH

+4

Es ist häufig viel schöner, den aktuellen Workflow zu emulieren, anstatt jedem Entwickler zu empfehlen, sein Verhalten zu ändern. Besonders wenn Eclipse viel schneller ist als Ameisen. –

2

This question enthält einige nützliche Links auf Headless-Builds, aber sie sind hauptsächlich auf die Erstellung von Plugins ausgerichtet. Ich bin mir nicht sicher, wie viel davon auf reine Java-Projekte angewendet werden kann.

-5

Was Eclipse normalerweise tut, ist BUILD nur Java-Dateien. Vorausgesetzt, Sie sollten in der Lage sein, den Klassenpfad aus der Datei .classpath und die erforderlichen Quellen aus der Datei .project zu betrachten und einen Javac darauf auszuführen. Es sollte ziemlich einfach sein.

+13

Wenn es einfach wäre, dann sollte es in Ihrer Antwort enthalten sein! – Kieveli

21

Um André Antwort zu vervollständigen, eine Ameise Lösung wie die in Emacs, JDEE, Ant, and the Eclipse Java Compiler, wie beschrieben werden könnte:

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

Das compilerarg Element ermöglicht es Ihnen, auch in zusätzlichen Befehlszeilen args in dem Eclipse-Compiler zu übergeben.

Sie können ein full ant script example here finden, die aufgerufen in einer Befehlszeile mit wäre:

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 

aber alles, was Ameise handelt, das ist nicht das, was Keith ist nach.

Für eine Batchkompilierung finden Sie in Compiling Java code, insbesondere den Abschnitt "den Batch-Compiler"

Die Batch-Compiler-Klasse im JDT Core-Plug-in befindet. Der Name der Klasse lautet org.eclipse.jdt.compiler.batch.BatchCompiler. Es ist in plugins/org.eclipse.jdt.core_3.4.0..jar gepackt. Seit 3.2 ist es auch als separater Download verfügbar. Der Name der Datei lautet ecj.jar.
Seit 3.3 enthält dieses Jar auch die Unterstützung für jsr199 (Compiler-API) und die Unterstützung für jsr269 (Annotationsverarbeitung). Um die Unterstützung der Annotationsverarbeitung zu nutzen, wird eine 1.6 VM benötigt.

Ausführen des Batch-Compiler in der Befehlszeile

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

oder geben würde:

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

alle Java Kompilierungsoptionen sind in diesem Abschnitt auch detailliert.

Der Unterschied mit dem Visual Studio-Befehlszeile Kompilation ist, dass Eclipse-scheint nicht direkt seine .project und .classpath in einem Befehlszeilenargument zu lesen. Sie müssen alle Informationen, die in .project und .classpath enthalten sind, in verschiedenen Befehlszeilenoptionen angeben, um das gleiche Ergebnis der Kompilierung zu erreichen.

Also, dann ist die kurze Antwort: "Ja, Eclipse tut es irgendwie." ;)

+2

Es ist möglich, einen Arbeitsbereich mit Eclipse-Projekt mithilfe des ant4eclipse-Projekts zu kompilieren, aber es erfordert viel Aufwand, da Sie alle notwendigen Schritte basierend auf den extrahierten Metainformationen manuell durchführen müssen. Ich habe es für unsere Inhouse-Projekte gemacht, aber ich würde es nicht empfehlen, es sei denn, du brauchst es WIRKLICH! Wir haben :-D –

+0

@ Thorbjørn Ravn Andersen: Vielen Dank für dieses Feedback.Sie könnten auch eine Antwort in diesem Thread zur Veranschaulichung der Art von "Ellenbogen Fett" hier beteiligten;) – VonC

+0

gut, was ich zusammen gehackt basierend auf ant4eclipse - die eine projectSet.psf-Datei benötigt - um die "export runnable jar" -Funktionalität isn zu emulieren Also schön keine Antwort. Außerdem läuft Eclipse nicht, sondern emuliert Eclipse mit Hilfe von ant: D –

-3

Kurze Antwort. Nr. Eclipse hat keinen Befehlszeilenschalter wie Visual Studio, um ein Projekt zu erstellen.

+3

Kurze Antwort: ja. Eclipse tut es irgendwie. Außer dass Sie alle Informationen, die in .project und .classpath enthalten sind, in verschiedenen Befehlszeilenoptionen angeben müssen. – VonC

+0

Externe (zu Eclipse) Build-Lösungen wie ant oder maven werden dafür typischerweise verwendet, wie in anderen Antworten erwähnt. –

0

Hallo Nur Ergänzung zu VonC Kommentare. Ich verwende ecj Compiler, um mein Projekt zu kompilieren. Es hat sich herumgesprochen, dass einige der Klassen nicht gefunden werden. Aber das Projekt war mit dem Javac Compiler in Ordnung.

So einfach habe ich die Klassen in den Klassenpfad (die wir als Argument übergeben müssen) und jetzt seine Arbeit gut ... :)

Kulbir Singh

5

Nach 27 Jahren bin ich auch unbequem in einer IDE zu entwickeln.Ich habe diese Vorschläge (oben) ausprobiert - und wahrscheinlich habe ich einfach nicht alles richtig gemacht - also habe ich eine Websuche gemacht und herausgefunden, was bei mir 'http://incise.org/android-development-on-the-command-line.html' funktioniert.

Die Antwort schien eine Kombination aller Antworten zu sein (bitte sagen Sie mir, wenn ich falsch liege und meine Entschuldigung wenn ja).

Wie oben erwähnt, erstellt Eclipse/ADT nicht die notwendigen Ant-Dateien. Um ohne Eclipse IDE zu kompilieren (und ohne die Schaffung ant Skripte):

1) generiert build.xml in Ihrem Top-Level-Verzeichnis:

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) Als nächst ich das Projekt zu kompilieren. Ich war ein bisschen verwirrt wegen der Bitte, 'ant' nicht zu benutzen. Hoffentlich - Requester bedeutete, dass er keine Ant-Skripte schreiben wollte. Ich sage das weil der nächste Schritt ist die Anwendung mit 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) zu kompilieren Um die apk zu installieren auf das Gerät hatte ich wieder ant zu verwenden:

ant target install 

    ** my command line looked like ant debug install 

4) die auszuführen Projekt auf meinem Android-Handy verwende ich 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) Nebenbemerkung: Das Protokoll von Gerät verwenden, um anzuzeigen:

adb logcat 

3B) ein zweiter Seiten Hinweis: Der Link oben auch Anweisungen erwähnt enthält den Befehl das gesamte Projekt für den Bau .

Hoffentlich wird dies mit der Frage helfen. Ich weiß, ich war wirklich glücklich, irgendetwas zu diesem Thema hier zu finden.

+1

wenn das Projekt bereits erstellt wurde (im Debug-Modus zB) Sie können 'ant installld' verwenden, um ohne zu bauen zu installieren –

1

Ich wollte nur meine zwei Cent dazu hinzufügen. Ich habe versucht zu tun als @Kieveli für nicht win32 vorgeschlagen (unten wiederholt), aber es funktioniert nicht für mich arbeiten (auf CentOS mit Eclipse: Luna):

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

Auf meinem spezielles Setup auf CentOS mit Eclipse (Luna) diesem gearbeitet:

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

Die Ausgabe wie folgt aussehen sollte:

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 

Nicht ganz sicher, warum es es anscheinend tat zweimal, aber es scheint zu funktionieren.