通过命令行自动将Java(Android)项目导入Eclipse工作区

通过命令行自动将Java(Android)项目导入Eclipse工作区,java,android,eclipse,bash,scripting,Java,Android,Eclipse,Bash,Scripting,我正试图通过命令行(使用bash脚本)将项目自动导入Eclipse工作区。我已经看到许多帖子建议使用CDT headless build,即使是对于非C/C++项目,但我希望避免下载CDT,因为我的项目都是Java/Android项目,我希望能够为许多人实现自动化,而不必让他们都下载CDT。我在JDT headless build中尝试了以下方法,但没有成功: eclipse -nosplash \ -application org.eclipse.jdt.apt.core.aptBui

我正试图通过命令行(使用bash脚本)将项目自动导入Eclipse工作区。我已经看到许多帖子建议使用CDT headless build,即使是对于非C/C++项目,但我希望避免下载CDT,因为我的项目都是Java/Android项目,我希望能够为许多人实现自动化,而不必让他们都下载CDT。我在JDT headless build中尝试了以下方法,但没有成功:

eclipse -nosplash \
    -application org.eclipse.jdt.apt.core.aptBuild \
    -data [absolute_path_to_desired_workspace] \
    -import [absolute_path_to_project_directories]
输出显示“Building workspace”,然后显示“logout”,但是在工作区中打开Eclipse会话在Package explorer中没有显示任何内容

查看工作区中的./metadata/.log文件似乎没有显示任何导入错误


如果不使用CDT headless build,就无法将现有Java Eclipse项目自动导入Eclipse吗?

不幸的是,JDT发行版没有任何应用程序支持-import参数,比如CDT的
org.Eclipse.CDT.managedbuilder.core.headless build
。但您可以轻松编写一个简单的:

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() {
    }
}
package test.myapp;
导入java.util.LinkedList;
导入java.util.List;
导入org.eclipse.core.resources.IProject;
导入org.eclipse.core.resources.IProjectDescription;
导入org.eclipse.core.resources.IncrementalProjectBuilder;
导入org.eclipse.core.resources.ResourcesPlugin;
导入org.eclipse.core.runtime.NullProgressMonitor;
导入org.eclipse.core.runtime.Path;
导入org.eclipse.equinox.app.iaapplication;
导入org.eclipse.equinox.app.iaapplicationContext;
公共类应用程序实现IApplication{
公共对象启动(IAApplicationContext上下文)引发异常{
String[]args=(String[])context.getArguments().get(iaapplicationcontext.APPLICATION_args);
布尔构建=false;
//确定要导入的项目
列表项目=新建LinkedList();
对于(int i=0;i
您的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>


我已使用您的项目自动导入我的eclipse项目。太棒了,谢谢你。有关更多信息,请参见此处的答案:。接下来我想做的一个步骤是在导入之后自动化项目构建。你知道吗?你好!我已经编辑了示例插件的源代码,请找到新的“-build”选项,它会在导入插件完成后触发工作区重建。真棒-谢谢Spektom!目前,我正在循环并调用插件分别导入每个项目,因为一个坏项目可以阻止其余项目导入。我想,在这种情况下,我可以将
-build
选项添加到正在导入的最后一个项目中?是的。顺便说一句,您不需要单独导入每个项目,您可以在一个命令行中指定它们,如
-import project1-import project2-build
我正在进行多个导入,但是如果导入一个项目时出现问题,则会停止导入其余项目-