Cree el proyecto Java Eclipse desde la línea de comandos


118

¿Hay alguna forma de compilar un proyecto Java basado en Eclipse desde la línea de comandos?

Estoy tratando de automatizar mi compilación (usando FinalBuilder no ant), y no soy un experto en Java ni en Eclipse. Probablemente pueda descubrir cómo hacer esto con las opciones de línea de comandos de Java, pero luego el proyecto Eclipse se siente como un gran esfuerzo en vano.

En el caso de que no haya forma de compilar un proyecto de Eclipse a través de la línea de comando, ¿hay alguna manera de generar la línea de comando de Java requerida desde dentro de Eclipse? ¿O hay algunos archivos que puedo buscar para encontrar los pasos de compilación que está haciendo entre bastidores?


Chicos, estoy buscando una respuesta que NO incluya hormiga. Permítanme repetir la pregunta original ... ¿Hay alguna manera de construir un proyecto Eclipse desde la línea de comandos?

No creo que esta sea una pregunta irrazonable dado que puedo hacer algo como esto para Visual Studio:

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

3
¡¡Cómo no hay un plugin / jar para esto !!
Kieveli

1
Ok ... agregué una nueva respuesta correcta.
Kieveli

Respuestas:


61

Puede crear un proyecto de eclipse a través de un espacio de trabajo desde la línea de comando:

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

Utiliza el jdt aptcomplemento para crear su espacio de trabajo automáticamente. Esto también se conoce como "construcción sin cabeza". Malditamente difícil de entender. Si no está utilizando un exe win32, puede intentar esto:

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

Actualizar

Hace varios años, el eclipse fue reemplazado startup.jarpor el "lanzador equinoccio".

https://wiki.eclipse.org/Equinox_Launcher

En 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

El -dataparámetro especifica la ubicación de su espacio de trabajo.

El número de versión del lanzador equinoccio dependerá de la versión de eclipse que tenga.


4
Aunque hace mucho que me mudé de este proyecto y no puedo verificar si esta respuesta realmente funciona o no, estoy cambiando la respuesta aceptada a esta. Porque indica que Eclipse sí tiene un conmutador de línea de comando.
Keith G

3
Solo un pensamiento: parece que esto solo funciona para espacios de trabajo preexistentes. Supongo que esto hace que sea difícil, por ejemplo, verificar el proyecto desde el control de código fuente y construirlo de esta manera.
Juan

Creo que mi espacio de trabajo estaba comprometido con el repositorio svn. Tenía rutas relativas o estructuras de directorio coincidentes.
Kieveli

2
¿Cómo ves los resultados de la construcción? Probé esto y obtuve el resultado: "Espacio de trabajo de construcción", pero no obtuve ninguna indicación de si la construcción tuvo éxito o falló.
Dikla

También puede construir su espacio de trabajo a través de un script de línea de comandos. Ver help.eclipse.org/indigo/…
reprogramador

22

Para completar la respuesta de André, una solución de hormigas podría ser como la descrita en Emacs, JDEE, Ant y el compilador de Java Eclipse , como en:

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

El elemento compilerarg también le permite pasar argumentos de línea de comando adicionales al compilador de eclipse.

Puede encontrar un ejemplo completo de script de hormiga aquí que se invocaría en una línea de comando con:

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

PERO todo lo que tiene que ver con la hormiga, que no es lo que busca Keith.

Para una compilación por lotes, consulte Compilación de código Java , especialmente la sección " Uso del compilador por lotes "

La clase del compilador por lotes se encuentra en el complemento JDT Core. El nombre de la clase es org.eclipse.jdt.compiler.batch.BatchCompiler. Está empaquetado en plugins / org.eclipse.jdt.core_3.4.0..jar. A partir de la versión 3.2, también está disponible como descarga independiente. El nombre del archivo es ecj.jar.
Desde 3.3, este jar también contiene el soporte para jsr199 (API del compilador) y el soporte para jsr269 (procesamiento de anotaciones). Para utilizar el soporte de procesamiento de anotaciones, se requiere una VM 1.6.

Ejecutar el compilador por lotes desde la línea de comando daría

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

o:

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

Todas las opciones de compilación de Java se detallan también en esa sección.

La diferencia con la función de compilación de la línea de comandos de Visual Studio es que Eclipse no parece leer directamente su .project y .classpath en un argumento de línea de comandos . Debe informar toda la información contenida en .project y .classpath en varias opciones de línea de comandos para lograr el mismo resultado de compilación.

Entonces, la respuesta corta es: "sí, Eclipse lo hace". ;)


2
Es posible compilar un espacio de trabajo con el proyecto Eclipse utilizando el proyecto ant4eclipse, pero necesita mucho esfuerzo, ya que debe realizar todos los pasos necesarios manualmente en función de la metainformación que extraiga. Lo he hecho para nuestros proyectos internos, pero no lo recomendaría a menos que REALMENTE lo necesite. Hicimos :-D
Thorbjørn Ravn Andersen

@ Thorbjørn Ravn Andersen: gracias por sus comentarios. También puede publicar una respuesta en este hilo que ilustre el tipo de "
esfuerzo

bueno, lo que pirateé en conjunto basado en ant4eclipse, que requiere un archivo projectSet.psf, para emular la funcionalidad de "exportar jar ejecutable" no es bonito, por lo tanto, no hay respuesta. Además, no está ejecutando Eclipse, sino emulando Eclipse usando ant: D
Thorbjørn Ravn Andersen

Encontré esta vieja respuesta: Encontramos que "emular la compilación de Eclipse usando archivos de configuración de Eclipse" es demasiado frágil a largo plazo y recomendaré encarecidamente a otros que no sigan ese camino. En su lugar, utilice proyectos de Maven.
Thorbjørn Ravn Andersen

1
@JeffPuckettII Gracias. He restaurado el enlace.
VonC

8

Después de 27 años, yo también me siento incómodo desarrollando en un IDE. Probé estas sugerencias (arriba), y probablemente no seguí todo bien, así que hice una búsqueda en la web y encontré lo que funcionó para mí en ' http://incise.org/android-development-on-the- línea de comandos.html '.

La respuesta parecía ser una combinación de todas las respuestas anteriores (por favor, dígame si me equivoco y acepte mis disculpas si es así).

Como se mencionó anteriormente, eclipse / adt no crea los archivos ant necesarios. Para compilar sin eclipse IDE (y sin crear scripts de hormigas):

1) Genere build.xml en su directorio de nivel superior:

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) A continuación compilo el proyecto. Estaba un poco confundido por la solicitud de no usar 'ant'. Con suerte, el solicitante quiso decir que no quería escribir ningún guión de hormigas. Digo esto porque el siguiente paso es compilar la aplicación usando 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) Para instalar el apk en el dispositivo, tuve que usar ant nuevamente:

 ant target install

    ** my command line looked like  ant debug install

4) Para ejecutar el proyecto en mi teléfono Android, uso 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) Una nota al margen: para ver el registro del uso del dispositivo:

 adb logcat

3B) Una segunda nota al margen: el enlace mencionado anteriormente también incluye instrucciones para construir todo el proyecto desde el comando.

Con suerte, esto ayudará con la pregunta. Sé que me alegró mucho encontrar algo sobre este tema aquí.


1
si el proyecto ya está construido (en modo de depuración p. ej.) puede usar ant installdpara instalar sin compilar
serv-inc

4

El apporoach normal funciona al revés: creas tu compilación basada en maven o ant y luego usas integraciones para tu IDE de elección para que seas independiente de él, que es esp. importante cuando intenta poner al día a los nuevos miembros del equipo o utiliza un servidor de integración continuo para compilaciones automatizadas. Recomiendo usar maven y dejar que haga el trabajo pesado por ti. Cree un archivo pom y genere el proyecto eclipse a través de mvn eclipse: eclipse. HTH


4
Con frecuencia, es mucho más agradable emular el flujo de trabajo actual en lugar de decirle a cada desarrollador que cambie su comportamiento. Especialmente cuando Eclipse es mucho más rápido que la hormiga.
Thorbjørn Ravn Andersen

2

Esta pregunta contiene algunos enlaces útiles sobre compilaciones sin cabeza, pero en su mayoría están orientados a compilar complementos. No estoy seguro de cuánto se puede aplicar a proyectos Java puros.


1

Solo quería agregar mis dos centavos a esto. Intenté hacer lo que @Kieveli sugirió para no win32 (repetido a continuación) pero no funcionó para mí (en CentOS con Eclipse: Luna):

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

En mi configuración particular en CentOS usando Eclipse (Luna) esto funcionó:

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

La salida debería verse así:

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

No estoy muy seguro de por qué aparentemente lo hizo dos veces, pero parece funcionar.


0

Hola Solo una adición a los comentarios de VonC. Estoy usando el compilador ecj para compilar mi proyecto. arrojaba la impresión de que algunas de las clases no se encuentran. Pero el proyecto se estaba construyendo bien con el compilador javac.

Así que solo agregué las clases en la ruta de clases (que tenemos que pasar como argumento) y ahora funciona bien ... :)

Kulbir Singh


-3

Respuesta corta. No. Eclipse no tiene un modificador de línea de comandos como Visual Studio para construir un proyecto.


5
Respuesta corta: sí. Eclipse lo hace. Excepto que debe informar toda la información contenida en .project y .classpath en varias opciones de línea de comandos
VonC

Las soluciones de compilación externas (a Eclipse) como ant o maven se utilizan normalmente para esto, como se indica en otras respuestas.
JR Lawhorne
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.