2011-07-10 42 views
8

Tôi muốn biết nếu Nexus repository manager bao gồm Trình quản lý giấy phép như Artifactory (với plugin này: http://wiki.jfrog.org/confluence/display/RTF/License+Control).Làm thế nào để bạn quản lý giấy phép của các phụ thuộc (thư viện) của dự án của bạn?

Nếu không có cách nào để thực hiện điều đó trong Nexus thông qua plugin, bạn quản lý giấy phép phụ thuộc của dự án của bạn (với maven) như thế nào?

ví dụ: đối với một dự án thương mại, tôi không thể đưa thư viện GPL vào tạo phẩm cuối cùng (.jar, .war, v.v.).

+0

Sonatype đã đưa ra một sản phẩm mới cho quản lý giấy phép và tuân thủ gọi là "Insight" http://www.sonatype.com/Products/Sonatype-Insight/Development-Insight –

Trả lời

6

Chức năng Artifactory có thể được mô phỏng bằng cách sử dụng giấy phép validator Maven cắm

http://code.google.com/p/maven-license-validator-plugin/

Vấn đề thiết thực với cả hai cách tiếp cận mà rất ít các module Trung Maven có thông tin giấy phép up-to-date trong POMs của họ. Vì vậy, từ những gì tôi có thể thấy đây là một ý tưởng tuyệt vời mà thiếu một giải pháp thực sự cho vấn đề đánh giá sự tuân thủ giấy phép xây dựng của bạn ...

Giải pháp lý tưởng của tôi là một bộ các quá trình bên ngoài quét nội dung của Nexus kho lưu trữ thông tin giấy phép có sẵn. Thông tin này sau đó được sử dụng để hạt giống procurement suite của Nexus Professional để kiểm soát nội dung của một kho lưu trữ được phê duyệt để sử dụng trong bản phát hành (các bản xây dựng không phát triển).

Một số tệp nhị phân chứa tệp giấy phép văn bản và các gói mã nguồn có liên quan khác cũng có thể được quét thông tin giấy phép và IP. Một số công cụ của bên thứ 3 có sẵn để thực hiện tác vụ này. Những cái tôi đã được xem xét bao gồm:

Tóm lại, cho đến khi Maven Trung ương có thể cung cấp dữ liệu meta đáng tin cậy về việc cấp phép mô-đun, tôi nghĩ rằng giải pháp này vấn đề sẽ vẫn được tùy chỉnh và tối ưu hóa cao

1

Cách tiếp cận được thực hiện bởi Artifactory hơi khác một chút, vì nguyên vật siêu dữ liệu chỉ được sử dụng như điểm khởi đầu, nhưng ở phần cuối của người sử dụng mỗi ngày có thể hoàn thành và sửa đổi thiếu/thông tin giấy phép không đúng:

  1. Lúc đầu, POM (bao gồm tất cả POMs mẹ) hoặc Ivy mô tả được sử dụng để trích xuất thông tin giấy phép heuristic. Bước khám phá tự động này hoàn toàn là tùy chọn.
  2. Thông tin giấy phép này sau đó được đính kèm với các tạo phẩm dựa trên tổng kiểm tra của họ và người dùng có thể chỉnh sửa hoàn toàn. Quản trị viên có thể cập nhật chi tiết giấy phép sẽ gắn liền với phần tạo tác cho toàn bộ thời gian của nó.
  3. Mọi giấy phép đều có thể được phê duyệt hoặc không được chấp thuận theo chính sách toàn cầu.
  4. Tại thời điểm triển khai, thông tin giấy phép của tất cả các phụ thuộc được đọc - nếu giấy phép không được chấp thuận hoặc không xác định được tìm thấy, một cảnh báo bằng email với thông tin được gửi đến địa chỉ được định cấu hình trước.

Điều này cho phép bạn xử lý các thay đổi/bổ sung phụ thuộc mới (và giấy phép tương ứng) ngay khi chúng được cam kết và chọn theo quy trình xây dựng.

Một khác biệt chính khác là khả năng xử lý các tạo phẩm có nhiều giấy phép, trong đó chỉ một trong các giấy phép được phê duyệt và các giấy phép khác không được cấp phép.

Bạn có thể đọc thêm về nó ở đây -

http://wiki.jfrog.org/confluence/display/RTF/License+Control

+2

này không nói chuyện với câu hỏi ban đầu , và chỉ là một sân tiếp thị cho Artifactory. Có vẻ như người dùng đã quen thuộc với các dịch vụ của jfrog và đã hỏi cụ thể về các lựa chọn thay thế của Nexus. – Eddie

0

Một giải pháp tùy biến để sử dụng với Artifactory + Ivy + ant là để quét từng module để biết thông tin giấy phép. Nếu giấy phép được tìm thấy, hãy điền vào tệp giấy phép đó trong Artifactory và cập nhật nó là ivy.xml để có giấy phép đó dưới dạng một tạo phẩm được xuất bản. Sau đó, gọi <ivy:retrieve/> để tìm nạp giấy phép cùng với tệp jar của nó.

Giấy phép có thể được chỉ định trong số ivy.xml của mô-đun làm URL. Trong trường hợp này, hãy sử dụng nhiệm vụ của để tải xuống giấy phép và viết nó vào một tệp văn bản.

[inside log4j's ivy.xml as an example] 
<ivy-module xmlns:m="http://ant.apache.org/ivy/maven" version="2.0"> 
<info organisation="log4j" module="log4j" revision="1.2.16" status="integration" 
     publication="20120620150430"> 
    <license name="The Apache Software License, Version 2.0" 
    url="http://www.apache.org/licenses/LICENSE-2.0.txt"/> 
    ... 
</info> 
</ivy-module> 

Ngoài ra, giấy phép có thể được bao gồm như là một tập tin văn bản trong tập tin .jar của module. Trong trường hợp này, hãy sử dụng nhiệm vụ unjar của để trích xuất giấy phép và ghi nó vào một tệp văn bản.

[inside junit's .jar file as an example] 
junit-4.8.2.jar/LICENSE.txt 

Khi giấy phép đã được viết ra như một tập tin văn bản, sử dụng ant 's xmltask nhiệm vụ để thêm giấy phép như một artifact.

[inside log4j's ivy.xml as an example] 
<publications> 
<artifact conf="master" ext="jar" name="log4j" type="bundle"/> 
<artifact conf="sources" ext="jar" m:classifier="sources" name="log4j" type="source"/> 
<artifact conf="javadoc" ext="jar" m:classifier="javadoc" name="log4j" type="javadoc"/> 
<!-- next line added --> 
<artifact conf="master" ext="txt" name="log4j" type="license"/> 
</publications> 

Xuất bản sửa đổi ivy.xml và giấy phép trở lại Artifactory.

<ivy:resolve file="${ivy.xml}" /> 
<ivy:publish resolver="${resolver}" pubrevision="@{rev}" status="integration" 
overwrite="true" forcedeliver="true" haltonmissing="false" 
srcivypattern="${ivy.local}/[organisation]/[module]/ivy-[revision].xml" > 
    <artifacts pattern="${ivy.local}/[organisation]/[module]/ivys/ivy-[revision].[ext]" /> 
    <artifacts pattern="${ivy.cache.dir}/[organisation]/[module]/licenses/[module]-[revision].[ext]" /> 
</ivy:publish> 

Sử dụng <ivy:retrieve/> để lấy giấy phép cùng với file jar của nó khi bundling với xây dựng của bạn.

<ivy:retrieve pattern="${ivy.local}/[artifact].[ext]" conf="compile, runtime" type="jar, license" /> 
+0

Cũng tắt chủ đề. Người dùng đang hỏi về các lựa chọn thay thế của Maven/Nexus - không phải là các giải thích về tạo tác. – Eddie

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