Как вы управляете лицензиями зависимостей (библиотек) вашего проекта? [закрытый]

Я хотел бы знать, если Nexus repository manager включает менеджер лицензий, такой как Artifactory (с этим плагином:http://wiki.jfrog.org/confluence/display/RTF/License + контроль).

Если нет способа сделать это в Nexus через плагин, как вы управляете лицензиями зависимостей вашего проекта (с maven) ?

например, для коммерческого проекта я не могу включить библиотеку GPL в конечный артефакт (.сосуд. ,война, так далее.).

3 ответов


функциональность Artifactory может быть эмулирована с помощью плагина Maven license validator

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

практическая проблема с обоими этими подходами в том, что очень немногие центральные модули Maven имеют актуальную информацию о лицензии в своих POMs. Итак, из того, что я вижу, это отличная идея, которая не соответствует реальному решению проблемы оценки лицензии вашей сборки соответствие...

мое идеальное решение-это внешний набор процессов, которые сканируют содержимое репозитория Nexus на наличие информации о лицензии. Эта информация затем используется для семян Nexus Professional в закупок люкс для управления содержимым утвержденного репозитория для использования в выпуске (сборки без разработки).

некоторые двоичные файлы содержат текстовые файлы лицензий, а также связанные пакеты исходного кода также могут быть отсканированы для информации о лицензии и IP. Для выполнения этой задачи имеется ряд сторонних инструментов. Те, которые я рассматривал, являются:

В заключение, пока Maven Central не сможет предоставить надежные метаданные о лицензировании модулей, я думаю, что решения этой проблемы останутся сильно подгонянный и sub-optimal


подход Artifactory немного отличается, так как необработанные метаданные артефактов используются только в качестве отправной точки, но в конце дня пользователи могут заполнить и изменить отсутствующую / неправильную информацию о лицензии:

  1. сначала для извлечения эвристической информации о лицензии используются дескрипторы POM (включая все родительские Pom) или Ivy. Этот шаг автоматического обнаружения является необязательным.
  2. эта информация о лицензии затем присоединяется к артефактам на основе их контрольной суммы, и полностью редактируется пользователями. Администраторы могут обновлять сведения о лицензии, которые будут придерживаться артефакта в течение его жизни.
  3. каждая лицензия может быть одобрена или не одобрена в соответствии с глобальной политикой.
  4. во время развертывания информация о лицензии всех зависимостей считывается - если неутвержденные или неизвестные лицензии найдены, оповещение по электронной почте с информацией отправляется на предварительно настроенные адреса.

Это позволяет вам иметь дело с изменениями / дополнениями новых зависимостей (и их соответствующие лицензии), как только они будут зафиксированы и подобраны процессом сборки.

еще одним ключевым отличием является возможность обрабатывать артефакты с несколькими лицензиями, где только одна из лицензий утверждена, а другие нет.

вы можете прочитать больше об этом здесь -

http://wiki.jfrog.org/confluence/display/RTF/License + контроль


индивидуальное решение для использования с Artifactory + Ivy+ant сканировать каждый модуль для получения информации о лицензии. Если лицензия найдена, заполните этот файл лицензии в Artifactory и обновите его ivy.xml чтобы он был доступен как опубликованный артефакт. Тогда звоните <ivy:retrieve/> чтобы получить лицензию вместе с ее файлом jar.

лицензия может быть указана в модуле ivy.xml как URL. В этом случае используйте ant ' s get задача загрузить лицензию и записать ее в текстовый файл.

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

кроме того, лицензия может быть включена в качестве текстового файла в. В этом случае используйте ant ' s unjar задача извлечь лицензию и записать ее в текстовый файл.

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

после того, как лицензия была выписана в виде текстового файла, используйте ant ' s xmltask задача добавить лицензию в качестве артефакта.

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

опубликовать измененную ivy.xml и лицензию на 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>

использовать <ivy:retrieve/> чтобы получить лицензию вместе с ее файлом jar при объединении с вашей сборкой.

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