2012-04-27 45 views
10

Tôi đã thiết lập một dự án Maven cho một ứng dụng SWT. Ứng dụng này chạy trên nhiều nền tảng (OS X, Windows 64 bit, Windows 32 bit, Linux 64 bit và Linux 32 bit) và tôi đã thiết lập ứng dụng để nền tảng được phát hiện khi Maven chạy và gói được đóng gói ứng dụng đi đến các thư mục đích khác nhau. Dưới đây là những phần có liên quan từ pom.xml để đạt được điều này:Xây dựng nhiều ứng dụng SWT kiến ​​trúc với Maven

<profiles> 
    <profile> 
    <id>linux_x86_64</id> 
    <activation> 
     <os> 
     <name>linux</name> 
     <arch>amd64</arch> 
     </os> 
    </activation> 
    <build> 
     <directory>${project.basedir}/target/${project.version}/linux_x86_64</directory> 
    </build> 
    </profile> 

    <profile> 
    <id>win32_x86_64</id> 
    <activation> 
     <os> 
     <name>linux</name> 
     <arch>i386</arch> 
     </os> 
    </activation> 
    <build> 
     <directory>${project.basedir}/target/${project.version}/win32_x86_64</directory> 
    </build> 
    </profile> 
    ... 
</profiles> 

Và sự phụ thuộc sử dụng cho SWT là thế này:

<dependencies> 
    <dependency> 
    <groupId>org.eclipse</groupId> 
    <artifactId>swt</artifactId> 
    <version>3.7.2.v3740</version> 
    </dependency> 
... 
</dependencies> 

Để làm cho mọi việc rõ ràng, tôi đã cài đặt trong kho lưu trữ địa phương của tôi SWT gói giả (org.eclipse.swt_3.7.2.v3740f.jar) và tất cả các nền tảng cụ thể cho nền tảng (org.eclipse.swt.gtk.linux.x86_64_3.7.2.v3740f, org.eclipse.swt.win32.x86_64_3 .7.2.v3740f, v.v.).

Cách tôi đóng gói phụ thuộc là với thư mục "lib" sử dụng plugin phụ thuộc maven và Maven đủ thông minh để sao chép cả gói giả SWT và gói nền tảng cụ thể của máy mà tôi đang đóng gói ứng dụng. Cho đến nay rất tốt ...

Vấn đề là tôi muốn biên dịch ứng dụng cho các nền tảng khác nhau từ một máy. Làm thế nào tôi sẽ đạt được điều này?

Tôi đã cố gắng thiết lập một tài sản trong mỗi profile với jar SWT cần thiết cho mỗi nền tảng, như thế này (ví dụ dành cho Windows 64-bit):

<properties> 
    <swt.artifactId>swt.win32.x86_64</swt.artifactId> 
    <swt.version>3.7.2</swt.version> 
</properties> 

Nhưng dùng phương pháp này cả profile- jar SWT cụ nền tảng cụ thể một trong những nơi tôi đang chạy Maven được sao chép vào thư mục "lib", kết thúc với ba lọ:

  • swt-3.7.2.v3740.jar
  • swt .gtk.linux.x86_64-3.7.2.jar
  • swt.win32.x86_64-3.7.2.jar

Có cách nào mà tôi có thể chỉ định một hồ sơ cá nhân bỏ qua máy mà tôi chạy nó để tôi không cần phải tự loại bỏ bình SWT của nó?

Xin cảm ơn trước.

Trả lời

2

Không chắc như thế nào depency-plugin xử lý nó, nhưng nó phải làm việc nếu bạn chỉ có một sự phụ thuộc như thế này:

<dependency> 
     <groupId>${swt.groupId}</groupId> 
     <artifactId>${swt.artifactId}</artifactId> 
     <version>3.7.2</version> 
     <scope>compile</scope> 
    </dependency> 

Và sau đó tiểu sử như thế này:

<profile> 
    <id>gtk_linux_x86_64</id> 
    <activation> 
    <os> 
     <name>linux</name> 
     <arch>x86_64</arch> 
    </os> 
    </activation> 
    <properties> 
    <swt.groupId>org.eclipse.swt.gtk.linux</swt.groupId> 
    <swt.artifactId>x86_64</swt.artifactId> 
    </properties> 
</profile> 

Bây giờ phiên bản SWT cần thiết được sử dụng tự động, nhưng có thể được đặt thành những gì bạn cần (ví dụ: khi xây dựng bản phát hành) cũng như sử dụng:

mvn -P gtk_linux_x86_64

Lưu ý: Thay đổi groupId và artifactId của bạn nếu cần.

+0

Đó chính xác là những gì tôi đã thử trước và kết quả chính xác giống như những gì được mô tả trong câu hỏi ban đầu của tôi. Dường như không có vấn đề gì, Maven đóng gói bình SWT của hệ thống đang chạy. – Alf

+0

Xin lỗi khi biết điều đó, bạn có thể muốn thử cái này hơn: http://mchr3k.github.com/swtjar/ – hennr

+0

Cảm ơn, tôi chắc chắn sẽ thử, mặc dù tôi nghi ngờ rằng Maven sẽ cố gắng đóng gói thư viện từ máy chủ không có vấn đề gì. Tôi sẽ giữ cho bạn được đăng. – Alf

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