从命令行构建 Eclipse Java 项目

Posted

技术标签:

【中文标题】从命令行构建 Eclipse Java 项目【英文标题】:Build Eclipse Java Project from Command Line 【发布时间】:2010-09-17 09:57:00 【问题描述】:

有没有办法从命令行编译基于 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"

【问题讨论】:

怎么没有这个插件/jar!! 好的...我添加了一个新的正确答案。 【参考方案1】:

您可以从命令行通过工作区构建一个 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 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

-data 参数指定工作区的位置。

Equinox 启动器的版本号取决于您拥有的 Eclipse 版本。

【讨论】:

尽管我早就离开了这个项目并且无法验证这个答案是否真的有效,但我正在将接受的答案更改为这个。因为它表明 Eclipse 确实有命令行开关。 只是一个想法 - 似乎这只适用于预先存在的工作区。我想这使得很难,例如,从源代码管理中签出项目并以这种方式构建它。 我相信我的工作空间已提交给 svn 存储库。它要么具有相对路径,要么具有匹配的目录结构。 您如何看待构建结果?我试过了,得到了输出:“Building workspace”,但我没有得到关于构建成功还是失败的指示。 您还可以通过命令行 ant 脚本构建您的工作区。见help.eclipse.org/indigo/…【参考方案2】:

为了完成安德烈的回答,蚂蚁解决方案可能类似于Emacs, JDEE, Ant, and the 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 元素还允许您将额外的命令行参数传递给 eclipse 编译器。

您可以找到一个full ant script example here,它会在命令行中调用

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 所追求的。

关于批量编译,请参考Compiling Java code,尤其是“使用批量编译器”部分

批处理编译器类位于 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 确实如此。” ;)

【讨论】:

可以使用 ant4eclipse 项目编译带有 Eclipse 项目的工作区,但它需要大量的麻烦,因为您需要根据提取的元信息手动执行所有必要的步骤。我已经为我们的内部项目完成了它,但除非你真的需要,否则我不会推荐它!我们做到了:-D @Thorbjørn Ravn Andersen:感谢您的反馈。您还可以在此线程中发布答案,说明此处涉及的“肘部油脂”;) 好吧,我基于 ant4eclipse(需要 projectSet.psf 文件)来模拟“导出可运行 jar”功能的东西并不漂亮,因此没有答案。此外,它不是运行 Eclipse,而是使用 ant 模拟 Eclipse :D 遇到了这个旧答案:我们发现“使用 Eclipse 配置文件模拟 Eclipse 构建”从长远来看太脆弱了,我强烈建议其他人不要这样做。改用 Maven 项目。 @JeffPuckettII 谢谢。我已恢复链接。【参考方案3】:

只是想把我的两分钱加到这个上。我尝试按照@Kieveli 对非 win32 的建议(在下面重复)但它对我不起作用(在 CentOS 上使用 Eclipse: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

不太清楚为什么它显然做了两次,但它似乎有效。

【讨论】:

【参考方案4】:

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编译应用程序

 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) 要在我的安卓手机上运行该项目,我使用 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) 第二个附注:上面提到的链接还包括从命令构建整个项目的说明。

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

【讨论】:

如果项目已经构建(在调试模式 f.ex.)你可以使用 ant installd 安装而不构建【参考方案5】:

您好,除了 VonC cmets。我正在使用 ecj 编译器来编译我的项目。一些课程没有找到,这让我感到很奇怪。但是该项目使用 javac 编译器构建得很好。

所以我只是将类添加到类路径中(我们必须将其作为参数传递),现在它工作正常...... :)

库尔比尔辛格

【讨论】:

【参考方案6】:

简短的回答。不。 Eclipse 没有像 Visual Studio 这样的命令行开关来构建项目。

【讨论】:

简短回答:是的。 Eclipse 有点像。除非您必须在各种命令行选项中报告 .project 和 .classpath 中包含的所有信息 如其他回复中所述,通常使用 ant 或 maven 等外部(对 Eclipse)构建解决方案。【参考方案7】:

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

【讨论】:

【参考方案8】:

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

【讨论】:

模拟当前的工作流程通常比告诉每个开发人员改变他们的行为要好得多。尤其是当 Eclipse 比 ant 快得多时。

以上是关于从命令行构建 Eclipse Java 项目的主要内容,如果未能解决你的问题,请参考以下文章

从命令行构建多个 CDT C++ 项目

以eclipse -clean命令从命令行启动 eclipse

java要在命令行执行eclipse的项目的方法

从命令行获取 Java 合规级别信息

是否有任何命令行工具可以从 db 生成 Java 实体类(不是 Netbeans 或 Eclipse 向导)

我可以从 Eclipse 使用 Maven,但不能从命令行使用