17

コマンドラインを介して(bashスクリプトを使用して)E​​clipseワークスペースへのプロジェクトのインポートを自動化しようとしています。C / C ++以外のプロジェクトでもCDTヘッドレスビルドを使用することを提案する投稿をたくさん見ましたが、私のプロジェクトはすべてJava / Androidプロジェクトであり、多くの人がこれを自動化できるようにしたいので、CDTをダウンロードする必要はありません。それらすべてにCDTをダウンロードさせる必要はありません。私はJDTヘッドレスビルドで次のことを試しましたが、役に立ちませんでした。

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

出力には「Buildingworkspace」、次に「logout」と表示されますが、ワークスペースでEclipseのセッションを開くと、PackageExplorerには何も表示されません。

ワークスペースで./metadata/.logファイルを確認しても、インポートに関するエラーは表示されないようです。

CDTヘッドレスビルドを使用せずに、既存のJava EclipseプロジェクトのEclipseへのインポートを自動化することはできませんか?

4

1 に答える 1

15

残念ながら、JDTディストリビューションには、CDTのように-import引数をサポートするアプリケーションはありません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

于 2012-07-11T15:18:27.193 に答える