通过命令行自动将Java(Android)项目导入Eclipse工作区
问题内容:
我试图通过命令行(使用bash脚本)自动将项目导入Eclipse工作区。我已经看到很多帖子建议即使对于非C / C
++项目也使用CDT无头构建,但是我想避免下载CDT,因为我的项目都是Java /
Android项目,并且我希望能够对许多人实现自动化无需让他们都下载CDT。我已经尝试了以下无用的JDT无头构建:
eclipse -nosplash \
-application org.eclipse.jdt.apt.core.aptBuild \
-data [absolute_path_to_desired_workspace] \
-import [absolute_path_to_project_directories]
输出显示“正在构建工作区”,然后显示“注销”,但是在工作区中打开Eclipse会话在Package Explorer中没有任何显示。
在工作区中查看./metadata/.log文件似乎未显示任何导入错误。
如果不使用CDT无头构建,是否不可能将现有的Java Eclipse项目自动导入Eclipse?
问题答案:
不幸的是,JDT发行版没有任何支持 -import
参数的应用程序,例如CDT的org.eclipse.cdt.managedbuilder.core.headlessbuild
。但是您可以轻松编写一个简单的代码:
package test.myapp;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.equinox.app.IApplication;
import org.eclipse.equinox.app.IApplicationContext;
public class Application implements IApplication {
public Object start(IApplicationContext context) throws Exception {
String[] args = (String[]) context.getArguments().get(IApplicationContext.APPLICATION_ARGS);
boolean build = false;
// Determine projects to import
List<String> projects = new LinkedList<String>();
for (int i = 0; i < args.length; ++i) {
if ("-import".equals(args[i]) && i + 1 < args.length) {
projects.add(args[++i]);
} else if ("-build".equals(args[i])) {
build = true;
}
}
if (projects.size() == 0) {
System.out.println("No projects to import!");
} else {
for (String projectPath : projects) {
System.out.println("Importing project from: " + projectPath);
// Import project description:
IProjectDescription description = ResourcesPlugin.getWorkspace().loadProjectDescription(
new Path(projectPath).append(".project"));
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(description.getName());
project.create(description, null);
project.open(null);
}
// Build all projects after importing
if (build) {
System.out.println("Re-building workspace");
ResourcesPlugin.getWorkspace().build(IncrementalProjectBuilder.CLEAN_BUILD, new NullProgressMonitor());
ResourcesPlugin.getWorkspace().build(IncrementalProjectBuilder.FULL_BUILD, new NullProgressMonitor());
}
}
return null;
}
public void stop() {
}
}
您的plugin.xml应包含以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
id="App"
point="org.eclipse.core.runtime.applications">
<application
cardinality="singleton-global"
thread="main"
visible="true">
<run
class="test.myapp.Application">
</run>
</application>
</extension>
</plugin>
创建并将插件导出为“ test.myapp_1.0.0.jar”。然后,您可以按以下方式使用它:
- 将test.myapp_1.0.0.jar复制到您的Eclipse / dropins /文件夹中
- 将所有需要的插件复制到目标工作空间目录:
cp -r项目/ * NewWorkspace /
- 将所需的项目导入工作空间:
蚀-nosplash-应用程序test.myapp.App-数据NewWorkspace-导入/ path / to / NewWorkspace /
project1-导入/ path / to / NewWorkspace / project2等…
- 现在,您可以安全地从Eclipse / dropins /文件夹中删除test.myapp_1.0.0.jar。
我已经上传了所有代码,包括此处导出的插件:https :
//github.com/spektom/eclipse-import