Подтвердить что ты не робот

Автоматизировать импорт проектов Java (Android) в рабочее пространство Eclipse через командную строку

Я пытаюсь автоматизировать импорт проектов в рабочее пространство Eclipse через командную строку (используя bash script). Я видел много сообщений, предлагающих использовать сборку без использования CDT даже для проектов, отличных от 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]

В выводе отображается "Building workspace", а затем "logout", но открытие сеанса Eclipse в рабочей области ничего не отображается в проводнике пакетов.

Просмотр файла. /metadata/.log в рабочей области, похоже, не показывает ошибок при импорте.

Невозможно ли автоматизировать импорт существующих проектов Java Eclipse в Eclipse без использования сборки без головок CDT?

4b9b3361

Ответ 1

К сожалению, в дистрибутиве 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/folder
  • Скопируйте все необходимые плагины в каталог целевой рабочей области:

    cp -r projects/* NewWorkspace/

  • Импорт необходимых проектов в рабочую область:

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

  • Теперь вы можете безопасно удалить test.myapp_1.0.0.jar из Eclipse/dropins/folder.

Я загрузил весь код, включая экспортированный плагин здесь: https://github.com/spektom/eclipse-import