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

标签 java android eclipse bash scripting

我正在尝试通过命令行(使用 bash 脚本)自动将项目导入 Eclipse 工作区。我看到很多帖子建议使用 CDT headless 构建,即使是非 C/C++ 项目,但我想避免下载 CDT,因为我的项目都是 Java/Android 项目,我希望能够为很多人自动化无需让他们全部下载 CDT。我用 JDT headless 构建尝试了以下操作,但无济于事:

eclipse -nosplash \
    -application org.eclipse.jdt.apt.core.aptBuild \
    -data [absolute_path_to_desired_workspace] \
    -import [absolute_path_to_project_directories]

输出显示“正在构建工作区”,然后显示“注销”,但在工作区中打开 Eclipse session 在包资源管理器中没有显示任何内容。

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

如果不使用 CDT headless 构建,是否无法将现有 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”。然后你可以按如下方式使用它:

  1. 将 test.myapp_1.0.0.jar 复制到您的 Eclipse/dropins/文件夹中
  2. 将所有需要的插件复制到目标工作区目录:

    cp -r projects/* NewWorkspace/

  3. 将所需项目导入工作区:

    eclipse -nosplash -application test.myapp.App -data NewWorkspace -import/path/to/NewWorkspace/project1 -import/path/to/NewWorkspace/project2 等...

  4. 现在,您可以安全地从 Eclipse/dropins/文件夹中删除 test.myapp_1.0.0.jar。

我已经上传了所有代码,包括这里导出的插件:https://github.com/spektom/eclipse-import

关于java - 通过命令行自动将 Java (Android) 项目导入 Eclipse 工作区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11302297/

相关文章:

eclipse - 将 scala 测试添加到 scala eclipse 项目中

java - 运行调用外部库的java代码时出错

android - 如何使用 @bubbblewrap 构建 TWA?

java - Android Cordova 应用程序的条件编译

android - Crashlytics NDK 解析 NDK 崩溃数据失败

android - on"XYZ"回调事件如何工作?

java - 如何避免 Eclipse 包装参数?

php - 复制和粘贴时 Eclipse 3.6 滞后

java - Tomcat 上的 ClassNotFoundException : javax. persistence.EntityListeners

java - Camel SFTP 端点未上传文件