2012-06-27 29 views
5

Giả sử tôi có hai dự án Java trong Maven/Eclipse:Đóng bó phụ thuộc phi mã nguồn mở với Maven

  • Một ứng dụng mã nguồn mở tổ chức tại GitHub
  • Một thư viện tư nhân nhỏ chứa các chức năng tiện ích đó là không mã nguồn mở (nhưng mà tôi có quyền sửa đổi, xây dựng và phân phối lại ở dạng biên soạn ví dụ như một file .jar)

tôi muốn làm cho nó có thể cho người khác để xây dựng, sửa đổi và chạy ứng dụng (và đóng góp lại cho dự án nguồn mở nếu họ thích!), nhưng điều này có nghĩa là họ cũng sẽ cần thư viện như một sự phụ thuộc.

Tôi muốn giữ mọi thứ đơn giản, để các bản dựng dễ dàng cho cả bản thân và người dùng của ứng dụng.

Cách thiết thực nhất để thực hiện công việc này là gì?

Trả lời

3

Cung cấp kho lưu trữ Maven của riêng bạn trên GitHub để phân phối thư viện nguồn đóng mà bạn được phép phân phối lại và tham khảo nó từ dự án của bạn (pom.xml).

http://cemerick.com/2010/08/24/hosting-maven-repos-on-github giới thiệu tốt về cách thiết lập kho lưu trữ trên GitHub. Bạn nên nhận thức được sự cẩn thận của một kho lưu trữ vi mô như vậy cũng được đề cập trong bài viết đó.

+0

+1 Đây là cách tốt hơn để làm điều đó! –

+0

Có cách nào để có khả năng hiển thị xem ai hoặc có bao nhiêu người đang tải xuống các hiện vật từ github? Có vẻ như github chỉ thu thập số liệu thống kê khi bạn sao chép repo. – cosbor11

3

Khi làm việc với Maven nó được khuyến khích sử dụng một Giám đốc Maven Repository như Nexus và cấu hình cài đặt tập tin của bạn như đã mô tả ở đây:

https://help.sonatype.com/display/NXRM3/Maven+Repositories#MavenRepositories-ConfiguringApacheMaven

Trong trường hợp của bạn này có các lợi ích bổ sung mà bạn có thể sử dụng Trình quản lý Kho lưu trữ Maven để lưu trữ bất kỳ tạo tác riêng tư nào.

+0

hmmm nhưng trong trường hợp này, tôi muốn người dùng nguồn mở công khai có thể sử dụng tạo phẩm (lý tưởng mà không cần hack cài đặt của họ). Có cách nào để làm điều đó không? – mikera

+0

bạn không bao giờ có thể chắc chắn rằng ai đó sẽ không lạm dụng bình của bạn (dịch ngược nó) – ant

+0

ví dụ: cho Nexus, bạn phải làm cho nhóm công khai có thể truy cập được bởi mọi người (tôi nghĩ đây là mặc định nếu bạn đang sử dụng địa chỉ IP/miền công cộng) và đảm bảo kho lưu trữ của bạn với thư viện riêng nằm trong nhóm công khai đó. Những người dùng khác sau đó có thể ủy quyền kho lưu trữ của bạn trong Trình quản lý Kho lưu trữ Maven của riêng họ. – Puce

3

Một giải pháp thực sự đơn giản là đặt thư viện riêng của bạn vào dự án của bạn (ví dụ: <project>/lib/library-1.0.jar) và bao gồm nó là phụ thuộc system. Bạn có thể bao gồm nó trong pom của bạn như thế nào.

<dependencies> 
    <dependency> 
     <groupId>my.private</groupId> 
     <artifactId>library</artifactId> 
     <version>1.0</version> 
     <scope>system</scope> 
     <systemPath>${project.basedir}/lib/library-1.0.jar</systemPath> 
    </dependency> 
    </dependencies> 

Thận trọng: Một phụ thuộc hệ thống không transitiv!

Từ các tài liệu

phạm vi này cũng tương tự như cung cấp ngoại trừ việc bạn phải cung cấp JAR chứa nó một cách rõ ràng. Tạo phẩm luôn luôn có sẵn và không được tra cứu trong kho lưu trữ.

+0

Cảm ơn, rất hữu ích. Có cách nào tốt để tự động cập nhật tệp jar thư viện nếu tôi xây dựng lại dự án thư viện không? – mikera

+0

Đây là một giải pháp đơn giản, nhưng rõ ràng không phải là tốt hơn, vì các vấn đề quá độ. Nhưng nó fullfill yêu cầu ... –

+0

@mikera Tôi không biết làm thế nào để đơn giản hóa việc cập nhật thư viện. Nếu thư viện của bạn sẽ được phát hành trong một phiên bản mới, bạn phải làm điều gì đó - ngay cả với cách tiếp cận kho lưu trữ. Bạn phải cập nhật số phiên bản của sự phụ thuộc của bạn trong tệp pom.xml của bạn (giả sử bạn không sử dụng các phạm vi phiên bản mà làm cho một xây dựng không thể sản xuất được). – FrVaBe

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