从命令行构建Eclipse Java项目


118

有没有一种方法可以从命令行编译基于Eclipse的Java项目?

我正在尝试使我的构建自动化(使用FinalBuilder而不是ant),而且我既不是Java专家也不是Eclipse专家。我可能可以弄清楚如何使用直接的Java命令行选项来执行此操作,但是Eclipse项目感觉像是在浪费很多精力。

如果无法通过命令行编译Eclipse项目,是否可以从Eclipse内部生成所需的Java命令行?还是有一些我可以四处查找的文件来查找其在后台执行的编译步骤?


伙计们,我正在寻找一个包含蚂蚁的答案。让我再次重申原始问题.......是否可以通过命令行构建Eclipse项目?

考虑到我可以为Visual Studio做这样的事情,我认为这不是一个不合理的问题:

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

3
怎么没有插件/罐子呢!
Kieveli

1
好的...我添加了新的正确答案。
Kieveli

Answers:


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

更新资料

几年前,Eclipse被startup.jar“ equinox启动器” 所取代

https://wiki.eclipse.org/Equinox_Launcher

在Eclipse火星(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确实具有命令行开关。
Keith G

3
只是一个想法-似乎这仅适用于预先存在的工作空间。我猜这很难,例如,从源代码管理中签出项目并以这种方式构建它。
约翰

我相信我的工作区已提交到svn信息库。它要么具有相对路径,要么具有匹配的目录结构。
Kieveli 2011年

2
您如何看待构建结果?我已经尝试过了,得到了输出:“ Building Workspace”,但是我没有得到关于构建成功还是失败的指示。
迪克拉2011年

您也可以通过命令行ant脚本构建工作区。参见help.eclipse.org/indigo/…–
重新编程器,

22

为了完成André的回答,一个ant解决方案可能类似于Emacs,JDEE,Ant和Eclipse Java Compiler中所述的解决方案,如下所示:

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

Compilerarg元素还允许您将其他命令行args传递给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

但是所有涉及蚂蚁的东西,而这并不是Keith的追求。

有关批处理编译,请参阅编译Java代码,尤其是“ 使用批处理编译器 ”部分。

批处理编译器类位于JDT Core插件中。该类的名称是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
托尔比约恩Ravn的安徒生

@ThorbjørnRavn Andersen:谢谢您的反馈。您也可以在此主题中发布答案,以说明此处涉及的“肘部油脂”;)
VonC

好吧,我基于ant4eclipse(需要一个projectSet.psf文件)一起破解以模仿“导出可运行jar”功能的事情还不是很清楚,因此没有答案。d:此外,它不运行Eclipse,但使用蚂蚁模仿的Eclipse
托尔比约恩Ravn的安德森

遇到了这个旧答案:从长远来看,我们发现“使用Eclipse配置文件模拟Eclipse构建”太脆弱了,我强烈建议其他人不要这样做。改用Maven项目。
托尔比约恩Ravn的安徒生

1
@JeffPuckettII谢谢。我已经恢复了链接。
VonC

8

27年后,我也对使用IDE感到不舒服。我尝试了这些建议(以上)-可能只是没有正确地遵循所有建议-因此我进行了一次网络搜索,并在' http://incise.org/android-development-on-the- command-line.html '。

答案似乎是以上所有答案的组合(请告诉我是否有错,如果有错,请接受道歉)。

如上所述,eclipse / adt不会创建必要的ant文件。为了在不使用eclipse 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 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)第二点注释:上面提到的链接还包括用于从命令构建整个项目的说明。

希望这将有助于解决这个问题。我知道我很高兴在这里找到有关此主题的任何信息。


1
如果项目已经构建(在调试模式下,例如f.ex.),则可以ant installd不进行构建即可安装
serv-inc 2015年

4

正常的工作方式是相反的:您基于mavenant创建构建,然后将集成用于您选择的IDE,以便您独立于它,尤其是。当您尝试使新的团队成员加快工作速度或使用竞争激烈的集成服务器进行自动构建时,这一点很重要。我建议使用Maven,让它为您完成繁重的工作。创建一个pom文件并通过mvn eclipse:eclipse生成eclipse项目。高温超导


4
模仿当前的工作流程通常比让每个开发人员更改其行为要好得多。尤其是当Eclipse比ant快得多时。
托尔比约恩Ravn的安德森

2

这个问题包含无头构建中的一些有用链接,但它们主要用于构建插件。我不确定其中有多少可以应用于纯Java项目。


1

只是想加我两分钱。我尝试按照@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

如其他响应中所述,通常使用外部(至Eclipse)构建解决方案,例如ant或maven。
JR Lawhorne 09年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.