有没有办法从命令行编译基于Eclipse的Java项目?
我正在尝试自动化我的构建(使用FinalBuilder而不是ant),而且我既不是Java也不是Eclipse专家。我可以通过直接的java命令行选项找出如何做到这一点,但Eclipse项目感觉就像浪费了很多精力。
如果无法通过命令行编译Eclipse项目,有没有办法从Eclipse中生成所需的java命令行?或者是否有一些我可以找到的文件来找到它在幕后进行的编译步骤?
伙计们,我正在寻找一个 NOT 包括蚂蚁的答案。让我重新讨论原始问题.......有没有办法从命令行构建Eclipse项目?
我不认为这是一个无理的问题,因为我可以为visual studio做这样的事情:
devenv.exe /build "Debug|Any CPU" "C:\Projects\MyProject\source\MyProject.sln"
答案 0 :(得分:58)
您可以从命令行通过工作区构建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用“equinox启动器”取代startup.jar
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启动器的版本号将取决于您拥有的日食版本。
答案 1 :(得分:22)
要完成André的回答,蚂蚁解决方案可能与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
但所有这些都涉及到蚂蚁,这不是基思所追求的。
有关批量编译,请参阅 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就是这样。” ;)
答案 2 :(得分: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)第二方注意:上面提到的链接还包括从命令构建整个项目的说明。
希望这有助于解决这个问题。我知道我很高兴在这里找到关于这个主题的任何。
答案 3 :(得分:4)
正常的apporoach反过来工作:你基于maven或ant创建你的构建,然后使用你所选择的IDE的集成,这样你就可以独立于它了,特别是。当您尝试使新团队成员加快速度或使用连续集成服务器进行自动构建时,这很重要。我建议使用maven,让它为你做繁重的工作。创建一个pom文件并通过mvn eclipse:eclipse生成eclipse项目。 HTH
答案 4 :(得分:2)
This question包含一些关于无头构建的有用链接,但它们主要用于构建插件。我不确定它有多少可以应用于纯Java项目。
答案 5 :(得分:1)
只是想加上我的两分钱。我试着像@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
不太确定为什么它显然做了两次,但似乎有效。
答案 6 :(得分:0)
您好,除了VonC评论。我正在使用ecj编译器来编译我的项目。它是在抛出一些没有找到的类。但该项目使用javac编译器很好。
所以我只是将类添加到类路径中(我们必须将其作为参数传递),现在它的工作正常......:)
Kulbir Singh
答案 7 :(得分:-3)
简短回答。没有。 Eclipse没有像Visual Studio这样的命令行开关来构建项目。