views:

10390

answers:

9

Is there a way to compile an Eclipse-based Java project from the command line?

I'm trying to automate my build (using FinalBuilder not ant), and I'm neither a Java nor Eclipse expert. I can probably figure out how to do this with straight java command line options, but then the Eclipse project feels like a lot of wasted effort.

In the event that there is no way to compile an Eclipse project via the command line, is there a way to generate the required java command line from within Eclipse? Or are there some files I can poke around to find the compile steps it is doing behind the scenes?

+1  A: 

The normal apporoach works the other way around: You create your build based upon maven or ant and then use integrations for your IDE of choice so that you are independent from it, which is esp. important when you try to bring new team members up to speed or use a contious integration server for automated builds. I recommend to use maven and let it do the heavy lifting for you. Create a pom file and generate the eclipse project via mvn eclipse:eclipse. HTH

André
It is frequently much nicer to emulate the current workflow instead of telling every developer to change their behaviour. Especially when Eclipse is much faster than ant.
Thorbjørn Ravn Andersen
+1  A: 

This question contains some useful links on headless builds, but they are mostly geared towards building plugins. I'm not sure how much of it can be applied to pure Java projects.

JesperE
A: 

What eclipse usually does is BUILD only java files. Given that you should be able to look at the classpath from the .classpath file and the required sources from the .project file and do a javac on that. It should be pretty easy.

anjanb
If it were easy, then it should have been included in your answer!
Kieveli
+10  A: 

To complete André's answer, an ant solution could be like the one described in Emacs, JDEE, Ant, and the Eclipse Java Compiler, as in:

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

The compilerarg element also allows you to pass in additional command line args to the eclipse compiler.

You can find a full ant script example here which would be invoked in a command line with:

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


BUT all that involves ant, which is not what Keith is after.

For a batch compilation, please refer to Compiling Java code, especially the section "Using the batch compiler"

The batch compiler class is located in the JDT Core plug-in. The name of the class is org.eclipse.jdt.compiler.batch.BatchCompiler. It is packaged into plugins/org.eclipse.jdt.core_3.4.0..jar. Since 3.2, it is also available as a separate download. The name of the file is ecj.jar.
Since 3.3, this jar also contains the support for jsr199 (Compiler API) and the support for jsr269 (Annotation processing). In order to use the annotations processing support, a 1.6 VM is required.

Running the batch compiler From the command line would give

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

or:

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

All java compilation options are detailed in that section as well.

The difference with the Visual Studio command line compilation feature is that Eclipse does not seem to directly read its .project and .classpath in a command-line argument. You have to report all information contained in the .project and .classpath in various command-line options in order to achieve the very same compilation result.

So, then short answer is: "yes, Eclipse kind of does." ;)

VonC
It is possible to compile a workspace with Eclipse project using the ant4eclipse project, but it needs a lot of elbow grease as you need to do all the necessary steps manually based on the meta information you extract. I've done it for our inhouse projects, but I would not recommend it unless you REALLY need to! We did :-D
Thorbjørn Ravn Andersen
@Thorbjørn Ravn Andersen: thank you for this feedback. You could also post an answer in this thread illustrating the kind of "elbow grease" involved here ;)
VonC
@VonC, well, what I hacked together based on ant4eclipse - which requires a projectSet.psf file - to emulate the "export runnable jar" functionality isn't pretty hence no answer. Besides, it is not running Eclipse, but emulating Eclipse using ant :D
Thorbjørn Ravn Andersen
@Thorbjørn Ravn Andersen: thank you for this feedback.
VonC
+1  A: 

Guys, I'm looking for an answer that does NOT include ant. Let me re-iterate the original question ....... Is there a way to build an Eclipse project from the command line?

I don't think this is an unreasonable question given that I can do something like this for visual studio:

devenv.exe /build "Debug|Any CPU" "C:\Projects\MyProject\source\MyProject.sln"
Keith G
just added the answer, through a java.exe command line with all appropriate compilation options available
VonC
Do not add additional information in an answer. Please edit your question instead.
Thorbjørn Ravn Andersen
A: 

Short answer. No. Eclipse does not have a command line switch like Visual Studio to build a project.

pdeva
Short answer: yes. Eclipse kind of does. Except you have to report all information contained in the .project and .classpath in various command-line options
VonC
External (to Eclipse) build solutions like ant or maven are typically used for this, as noted in other responses.
JR Lawhorne
A: 

Hi Just addition to VonC comments. I am using ecj compiler to compile my project. it was throwing expcetion that some of the classes are not found. But the project was bulding fine with javac compiler.

So just I added the classes into the classpath(which we have to pass as argument) and now its working fine... :)

Kulbir Singh

A: 

Hi All...

Anybody knows that why the BatchCompiler does not automatically finds the .jar files? i am getting the following excpetion with BatchCompiler

FATAL import javax.servlet.http.HttpServletRequest;

FATAL ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

FATAL The import javax.servlet.http.HttpServletRequest cannot be resolved

but the same code execute sucessfully with javac.

Thanks

the servlet jar is not in your classpath.
Thorbjørn Ravn Andersen
+3  A: 

You can build an eclipse project via a workspace from the command line:

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

It uses the jdt apt plugin to build your workspace automatically. This is also known as a 'Headless Build'. Damn hard to figure out. If you're not using a win32 exe, try this:

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

Kieveli
Even though I've long since moved on from this project and cannot verify whether or not this answer actually works, I'm changing the accepted answer to this one. Because it indicates that Eclipse does indeed have a command line switch.
Keith G