Erstellen Sie das Eclipse Java-Projekt über die Befehlszeile

118

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

Ich versuche, meinen Build zu automatisieren (mit FinalBuilder, nicht mit Ant), und ich bin weder Java- noch Eclipse-Experte. Ich kann wahrscheinlich herausfinden, wie dies mit geraden Java-Befehlszeilenoptionen gemacht wird, aber dann fühlt sich das Eclipse-Projekt wie eine Menge verschwendeter Mühe an.

Gibt es eine Möglichkeit, die erforderliche Java-Befehlszeile aus Eclipse heraus zu generieren, falls es keine Möglichkeit gibt, ein Eclipse-Projekt über die Befehlszeile zu kompilieren? Oder gibt es einige Dateien, in denen ich stöbern kann, um die Kompilierungsschritte zu finden, die hinter den Kulissen ausgeführt werden?


Leute, ich suche nach einer Antwort, die KEINE Ameise enthält. Lassen Sie mich die ursprüngliche Frage noch einmal wiederholen. Gibt es eine Möglichkeit, ein Eclipse-Projekt über die Befehlszeile zu erstellen?

Ich denke nicht, dass dies eine unvernünftige Frage ist, da ich so etwas für Visual Studio tun kann:

devenv.exe /build "Debug|Any CPU" "C:\Projects\MyProject\source\MyProject.sln"
Keith G.
quelle
3
Wie gibt es dafür kein Plugin / Jar !!
Kieveli
1
Ok ... Ich habe eine neue richtige Antwort hinzugefügt.
Kieveli

Antworten:

61

Sie können ein Eclipse-Projekt über einen Arbeitsbereich über die Befehlszeile erstellen:

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

Es verwendet das jdt aptPlugin, um Ihren Arbeitsbereich automatisch zu erstellen. Dies wird auch als "Headless Build" bezeichnet. Verdammt schwer herauszufinden. Wenn Sie keine win32-Exe verwenden, können Sie Folgendes versuchen:

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

Aktualisieren

Vor einigen Jahren wurde die Sonnenfinsternis durch startup.jarden "Equinox Launcher" ersetzt.

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 -dataParameter gibt den Speicherort Ihres Arbeitsbereichs an.

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

Kieveli
quelle
4
Obwohl ich dieses Projekt längst verlassen habe und nicht überprüfen kann, ob diese Antwort tatsächlich funktioniert, ändere ich die akzeptierte Antwort in diese. Weil es anzeigt, dass Eclipse tatsächlich einen Befehlszeilenschalter hat.
Keith G
3
Nur ein Gedanke - scheint nur für bereits vorhandene Arbeitsbereiche zu funktionieren. Ich denke, dies macht es beispielsweise schwierig, das Projekt aus der Quellcodeverwaltung auszuchecken und auf diese Weise zu erstellen.
John
Ich glaube, mein Arbeitsbereich wurde dem SVN-Repository zugewiesen. Es hatte entweder relative Pfade oder übereinstimmende Verzeichnisstrukturen.
Kieveli
2
Wie sehen Sie die Build-Ergebnisse? Ich habe dies versucht und die Ausgabe "Arbeitsbereich erstellen" erhalten, aber ich habe keinen Hinweis darauf erhalten, ob der Build erfolgreich war oder fehlgeschlagen ist.
Dikla
Sie können Ihren Arbeitsbereich auch über ein Befehlszeilen-Ant-Skript erstellen. Siehe help.eclipse.org/indigo/…
Reprogrammierer
22

Um die Antwort von André zu vervollständigen, könnte eine Ameisenlösung wie die in Emacs, JDEE, Ant und dem Eclipse Java Compiler beschriebene sein , wie in:

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

Mit dem compilerarg-Element können Sie auch zusätzliche Befehlszeilenargumente an den Eclipse-Compiler übergeben.

Sie finden eine vollständiges Ant-Skript-Beispiel, das in einer Befehlszeile aufgerufen wird mit:

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 mit Ameisen zu tun hat, ist nicht das, wonach Keith strebt.

Eine Batch-Kompilierung finden Sie unter Kompilieren von Java-Code , insbesondere im Abschnitt " Verwenden des Batch-Compilers ".

Die Batch-Compiler-Klasse befindet sich im JDT Core-Plug-In. 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 diese JAR auch die Unterstützung für jsr199 (Compiler-API) und die Unterstützung für jsr269 (Annotation Processing). Um die Unterstützung für die Verarbeitung von Anmerkungen nutzen zu können, ist eine 1.6-VM erforderlich.

Ausführen des Batch-Compilers Über die Befehlszeile würde geben

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

oder:

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

Alle Java-Kompilierungsoptionen werden auch in diesem Abschnitt beschrieben.

Der Unterschied zur Visual Studio-Befehlszeilenkompilierungsfunktion besteht darin, dass Eclipse das .project und den .classpath nicht direkt in einem Befehlszeilenargument zu lesen scheint . Sie müssen alle im .project und .classpath enthaltenen Informationen in verschiedenen Befehlszeilenoptionen melden, um das gleiche Kompilierungsergebnis zu erzielen.

Die kurze Antwort lautet also: "Ja, Eclipse tut es irgendwie." ;)

VonC
quelle
2
Es ist möglich, einen Arbeitsbereich mit dem Eclipse-Projekt mithilfe des ant4eclipse-Projekts zu kompilieren, es wird jedoch viel Ellbogenfett benötigt, da Sie alle erforderlichen Schritte manuell basierend auf den von Ihnen extrahierten Metainformationen ausführen müssen. Ich habe es für unsere Inhouse-Projekte getan, aber ich würde es nicht empfehlen, es sei denn, Sie müssen es WIRKLICH! Wir haben :-D
Thorbjørn Ravn Andersen
@ Thorbjørn Ravn Andersen: Danke für dieses Feedback. Sie können auch eine Antwort in diesem Thread posten, die die Art des "Ellbogenfetts" veranschaulicht, um das es hier geht;)
VonC
Nun, was ich basierend auf ant4eclipse - für das eine projectSet.psf-Datei erforderlich ist - zusammen gehackt habe, um die "export runnable jar" -Funktionalität zu emulieren, ist nicht schön, daher keine Antwort. Außerdem läuft es nicht Eclipse, sondern emuliert Eclipse mit ant: D
Thorbjørn Ravn Andersen
Kam auf diese alte Antwort: Wir fanden, dass das "Eclipse-Build mit Eclipse-Konfigurationsdateien emulieren" auf lange Sicht zu spröde ist, und ich werde anderen dringend raten, diesen Weg nicht zu gehen. Verwenden Sie stattdessen Maven-Projekte.
Thorbjørn Ravn Andersen
1
@ JeffPuckettII Danke. Ich habe den Link wiederhergestellt.
VonC
8

Nach 27 Jahren ist es mir auch unangenehm, mich in einer IDE zu entwickeln. Ich habe diese Vorschläge (oben) ausprobiert - und wahrscheinlich nicht alles richtig verfolgt -, also habe ich eine Websuche durchgeführt und unter ' http://incise.org/android-development-on-the- command-line.html '.

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

Wie oben erwähnt, erstellt eclipse / adt nicht die erforderlichen Ant-Dateien. So kompilieren Sie ohne Eclipse-IDE (und ohne Ant-Skripte):

1) Generieren Sie build.xml in Ihrem obersten 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ächstes kompiliere ich das Projekt. Ich war ein wenig verwirrt von der Bitte, 'Ameise' nicht zu verwenden. Hoffentlich bedeutete der Anforderer, dass er keine Ameisenskripte schreiben wollte. Ich sage dies, weil der nächste Schritt darin besteht, die Anwendung mit ant zu kompilieren

 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) Um die apk auf dem Gerät zu installieren, musste ich ant erneut verwenden:

 ant target install

    ** my command line looked like  ant debug install

4) Um das Projekt auf meinem Android-Handy auszuführen, benutze 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) Eine Randnotiz: Um das Protokoll vom Gerät aus anzuzeigen, verwenden Sie:

 adb logcat

3B) Eine zweite Randnotiz: Der oben erwähnte Link enthält auch Anweisungen zum Erstellen des gesamten Projekts aus dem Befehl.

Hoffentlich hilft dies bei der Frage. Ich weiß, dass ich mich sehr gefreut habe, hier etwas zu diesem Thema zu finden.

Charles Thomas
quelle
1
Wenn das Projekt bereits erstellt wurde (im Debug-Modus f.ex.), können Sie es ant installdohne Gebäude installieren
serv-inc
4

Der normale Ansatz funktioniert umgekehrt: Sie erstellen Ihren Build basierend auf Maven oder Ant und verwenden dann Integrationen für die IDE Ihrer Wahl, damit Sie unabhängig davon sind. Wichtig, wenn Sie versuchen, neue Teammitglieder auf den neuesten Stand zu bringen oder einen umstrittenen Integrationsserver für automatisierte Builds zu verwenden. Ich empfehle, Maven zu verwenden und das schwere Heben für Sie erledigen zu lassen. Erstellen Sie eine POM-Datei und generieren Sie das Eclipse-Projekt über mvn eclipse: eclipse. HTH

André
quelle
4
Es ist häufig viel schöner, den aktuellen Workflow zu emulieren, als jedem Entwickler zu sagen, dass er sein Verhalten ändern soll. Besonders wenn Eclipse viel schneller als Ameise ist.
Thorbjørn Ravn Andersen
2

Diese Frage enthält einige nützliche Links zu Headless-Builds, die jedoch hauptsächlich auf das Erstellen von Plugins ausgerichtet sind. Ich bin mir nicht sicher, wie viel davon auf reine Java-Projekte angewendet werden kann.

JesperE
quelle
1

Ich wollte nur meine zwei Cent dazu addieren. Ich habe versucht, das zu tun, was @Kieveli für nicht win32 vorgeschlagen hat (siehe unten), aber es hat bei mir nicht funktioniert (unter CentOS mit Eclipse: Luna):

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

Bei meinem speziellen Setup unter CentOS mit Eclipse (Luna) hat dies funktioniert:

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

Die Ausgabe sollte ungefähr so ​​aussehen:

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

Ich bin mir nicht ganz sicher, warum es anscheinend zweimal passiert ist, aber es scheint zu funktionieren.

jkwinn26
quelle
0

Hallo Nur Ergänzung zu VonC-Kommentaren. Ich verwende den ecj-Compiler, um mein Projekt zu kompilieren. Es war zu erwarten, dass einige der Klassen nicht gefunden wurden. Aber das Projekt lief gut mit Javac Compiler.

Also habe ich einfach die Klassen in den Klassenpfad eingefügt (den wir als Argument übergeben müssen) und jetzt funktioniert es einwandfrei ... :)

Kulbir Singh


quelle
-3

Kurze Antwort. Nein. Eclipse verfügt nicht über einen Befehlszeilenschalter wie Visual Studio zum Erstellen eines Projekts.

pdeva
quelle
5
Kurze Antwort: ja. Eclipse tut es irgendwie. Außer Sie müssen alle im .project und .classpath enthaltenen Informationen in verschiedenen Befehlszeilenoptionen
melden
Hierfür werden normalerweise externe (zu Eclipse) Build-Lösungen wie Ant oder Maven verwendet, wie in anderen Antworten angegeben.
JR Lawhorne