2009-03-23 32 views
12

Có ai có mẫu "hello world" hoặc hướng dẫn để tạo một đoạn plugin Eclipse không?Fragment Plugin Eclipse

Tôi có một plugin chủ làm việc đó, vì lợi ích của sự đơn giản, chỉ là thế này ...

public void start(BundleContext context) throws Exception { 
    System.out.println("Hello...."); 
    super.start(context); 
    plugin = this; 
} 

public void stop(BundleContext context) throws Exception { 
    System.out.println("Goodbye..."); 
    plugin = null; 
    super.stop(context); 
} 

Simple đủ và công trình. Bây giờ tôi muốn thêm một mảnh vào máy chủ đó, điều này dường như không đơn giản như việc tạo một máy chủ lưu trữ plugin. Tôi chỉ không thấy làm thế nào để tạo ra một dự án mảnh và thêm logic vào nó. Giả sử tôi chỉ muốn làm điều gì đó đơn giản và có đoạn để in "Hello2" tại số start() và "Goodbye2" tại số stop(). Ai đó có thể cho tôi một ví dụ làm việc?

Trả lời

17

Eclipse -> Tệp -> Mới ... -> Dự án mảnh -> đặt plugin máy chủ (trong không gian làm việc của bạn hoặc trong plugin trong nền tảng đích).

Mở "Trình chỉnh sửa tệp kê khai plugin" (bạn có thể thực hiện bằng cách nhấp vào build.properties, manifest.mf hoặc fragment.xml - nếu không có tệp như vậy, tạo tệp đó bằng tay) và trong tab có tên "Extentions" nhấp vào "Thêm .." và thêm "org.eclipse.ui.startup" và duyệt lớp thực hiện lớp org.eclipse.ui.IStartup. Tạo lớp này và triển khai nó. Bạn cần triển khai phương thức earlyStartup() là điểm vào của đoạn.

Lưu ý: Các dòng bên dưới chỉ là ví dụ. Tôi đã không kiểm tra nó để có thể có lỗi ...

Tất cả bạn cần là này (đây là cấu trúc dự án/cấu trúc thư mục):

  • Fragment-Dự án - gốc dir
    • /META-INF
      • MANIFEST.MF
    • /src (đó là thư mục nguồn)
      • FragmentStartClass.java (mà thực hiện giao diện org.eclipse.ui.IStartup và phương pháp earlyStartup)
    • build.properties
    • fragment.xml

META-INF/MANIFEST.MF nội dung:

 
Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: FragmentProject 
Bundle-SymbolicName: FragmentProject;singleton:=true 
Bundle-Version: 1.0.0 
Bundle-ClassPath: src/,. 
Fragment-Host: *HostPluginProjectSymbolicName*;bundle-version="1.0.0" 
Bundle-RequiredExecutionEnvironment: J2SE-1.5 
Require-Bundle: 

build.properties nội dung:

 
source.. = src,\ 
output.. = bin/ 
bin.includes = META-INF/, 
       ., 
        fragment.xml 

fragment.xml nội dung:

 
<?xml version="1.0" encoding="UTF-8"?> 
<?eclipse version="3.2"?> 
<fragment> 
    <extension 
     point="org.eclipse.ui.startup"> 
     <startup 
      class="FragmentStartClass"> 
     </startup> 
    </extension> 
</fragment> 

FragmentStartClass.java nội dung:

 
import org.eclipse.ui.IStartup; 


public class FragmentStartClass implements IStartup { 

    public void earlyStartup() { 
     System.out.println("Hello World From Fragment!"); 

    } 


} 
+0

đã giúp tôi rất nhiều. Cảm ơn bạn! – casaout

3

Vâng, trước hết bạn đang cố gắng làm gì? Bạn có chắc chắn các mảnh là giải pháp?

Phân đoạn chỉ đơn giản là bổ sung cho một plugin hiện có. Không có Bundle-Activator để "khởi động" mảnh đó. Bạn chỉ thu được thêm tài nguyên trong đoạn. Bạn có thể sử dụng một điểm mở rộng để thông báo cho máy chủ rằng một số chức năng cụ thể đã được mở rộng bởi một đoạn hiện tại. Hãy suy nghĩ về nó như là sáp nhập hai lúc chạy.

Xem this note từ Eclipse Wiki.

0

Tôi không chắc liệu bạn có thể làm điều này nếu không có plugin máy chủ biết điều gì đó về việc tải mã triển khai bổ sung của đoạn.

Ví dụ:

MyInterface o = null; 
try { 
    Class<?> c = getClass().getClassLoader().loadClass("my.fragment.Activator"); 
    o = (MyInterface) c.newInstance(); 
} catch (ClassNotFoundException e) { 
} 

if (o != null) { 
    o.start(); 
} 

nơi MyInterface là một giao diện quy định tại các plugin sở tại, và thực hiện bởi mảnh của bạn.

Một cách khác có thể là để phân đoạn cung cấp một điểm mở rộng xác định lớp mở rộng, nhưng điều đó có lẽ nhiều hơn mức cần thiết.

0

Tôi nghĩ rằng những gì bạn đang cố gắng làm được phục vụ tốt hơn bằng cách sử dụng extension points và các plugin riêng biệt, vì bạn muốn thêm chức năng vào plugin cơ sở.

Phân đoạn chỉ được sử dụng để thêm tài nguyên hoặc các lớp bổ sung vào plugin cơ sở.

0

Đối với hồ sơ, tôi vừa tạo ra một Fragment Eclipse có chứa một số lớp học Rule PMD Java.

Next để các tập tin lớp học, có chỉ có một tập tin yêu cầu trong Jar rằng: META-INF/MANIFEST.MF:

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: com.acme.tools.pmd 
Bundle-SymbolicName: com.acme.tools.pmd;singleton:=true 
Bundle-Version: 1.0.0 
Fragment-Host: net.sourceforge.pmd.eclipse.plugin;bundle-version="3.2.6" 
Bundle-RequiredExecutionEnvironment: J2SE-1.5 

Tôi cố gắng này với hiện tại Eclipse 3.7. Triển khai bằng cách đặt tệp Jar vào <eclipse root>/dropins/plugins (tạo thư mục đó nếu chưa có).

+0

Tôi cũng đang cố gắng triển khai dự án Fragment với Update Site & Jar File.For update-site tôi đã tạo ra trang web Cập nhật cho dự án Fragment chỉ, nhưng khi tôi cài đặt trong nhật thực nó không phản ánh những thay đổi của tôi. Tôi đã thử phương pháp mà bạn có đã đề cập ở trên, nhưng tôi vẫn không nhận được.Do tôi cần phải làm theo bất kỳ cách tiếp cận khác. Xin vui lòng giúp đỡ – Eshika