2012-07-02 29 views
17

Tôi đang cố gắng tự động hóa các dự án nhập vào một không gian làm việc Eclipse thông qua dòng lệnh (sử dụng tập lệnh bash). Tôi đã thấy nhiều bài viết đề xuất sử dụng CDT headless build ngay cả đối với các dự án không phải C/C++, nhưng tôi muốn tránh phải tải xuống CDT vì dự án của tôi là tất cả các dự án Java/Android và tôi muốn có thể tự động hóa điều này cho nhiều người mà không cần phải tải tất cả CDT xuống. Tôi đã thử những điều sau với JDT không đầu xây dựng với vô ích:Tự động nhập các dự án Java (Android) vào không gian làm việc của Eclipse thông qua dòng lệnh

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

Output lãm "Xây dựng không gian làm việc" và sau đó "logout", nhưng mở một phiên họp của Eclipse trong không gian làm việc cho thấy không có gì trong thám hiểm trọn gói.

Nhìn vào tệp ./metadata/.log trong không gian làm việc dường như không hiển thị bất kỳ lỗi nào khi nhập.

Không thể tự động hóa việc nhập các dự án Java Eclipse hiện có vào Eclipse mà không sử dụng bản xây dựng không đầu CDT?

Trả lời

15

Thật không may, phân phối JDT không có bất kỳ ứng dụng nào có thể hỗ trợ đối số -import, như số org.eclipse.cdt.managedbuilder.core.headlessbuild của CDT. Nhưng bạn có thể dễ dàng viết một đơn giản:

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 của bạn nên chứa một cái gì đó như:

<?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> 

Tạo, và xuất khẩu plug-in của bạn là "test.myapp_1.0.0.jar" . Sau đó, bạn có thể sử dụng nó như sau:

  1. Sao chép test.myapp_1.0.0.jar để bạn Eclipse/dropins/thư mục
  2. Sao chép tất cả cần plug-in vào thư mục đích không gian làm việc:

    cp dự án -r/* NewWorkspace/

  3. nhập cần thiết dự án vào không gian làm việc:

    nhật thực -nosplash -Ứng dụng test.myapp.App -data NewWorkspace -import/path/to/NewWorkspace/project1 -import/path/to/NewWorkspace/project2, v.v.

  4. Bây giờ, bạn có thể xóa an toàn test.myapp_1.0.0.jar khỏi Eclipse/dropins/folder.

Tôi đã tải lên tất cả các mã, trong đó có các plug-in xuất khẩu ở đây: https://github.com/spektom/eclipse-import

+0

Tôi đã sử dụng dự án của bạn để tự động nhập khẩu các dự án thực của tôi. Thật tuyệt vời, cảm ơn bạn. Xem câu trả lời ở đây để biết thêm thông tin: http://stackoverflow.com/a/21229397/1033422. Một bước tôi muốn làm tiếp theo là tự động hóa việc xây dựng dự án sau khi nhập khẩu. Bạn có bất kỳ ý tưởng về điều đó? –

+1

Xin chào SCH! Tôi đã chỉnh sửa mã nguồn của plugin mẫu, vui lòng tìm tùy chọn "-build" mới, kích hoạt xây dựng lại không gian làm việc sau khi nhập plugin hoàn tất. – spektom

+0

Tuyệt vời - cảm ơn Spektom! Hiện tại, tôi đang lặp và gọi plugin để nhập từng dự án một cách riêng biệt vì một dự án xấu có thể ngăn các dự án còn lại nhập. Tôi đoán, trong trường hợp này tôi chỉ có thể thêm tùy chọn '-build' vào dự án cuối cùng được nhập khẩu? –

Các vấn đề liên quan