簡體   English   中英

通過命令行自動將Java(Android)項目導入Eclipse工作區

[英]Automate import of Java (Android) projects into Eclipse workspace through commandline

我正在嘗試通過命令行(使用bash腳本)自動將項目導入Eclipse工作區。 我已經看過很多帖子建議使用CDT無頭構建,即使對於非C / C ++項目,但我想避免下載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”。 然后你可以使用它如下:

  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 etc.

  4. 現在,您可以安全地從Eclipse / dropins /文件夾中刪除test.myapp_1.0.0.jar。

我上傳了所有代碼,包括導出的插件: https//github.com/spektom/eclipse-import

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM