2016-02-26 4 views
0

Некоторые лицензии с открытым исходным кодом требуют распространения исходного кода для каждой зависимости. Мне нужно сделать извлеченные источники доступными для моего плагина сборки maven.Плагин сборки Maven присоединяет источники зависимостей

Как рекурсивно получить все исходные JAR для каждой используемой зависимости?

dependency:sources выполняет только загрузку исходных зависимостей в локальный репозиторий Maven, а не в настраиваемый каталог, который мне нужно определить.

+0

Это не возможно. если вы зависите от собственной библиотеки, чей код не является общедоступным? – Tunaki

+0

Конечно, это не сработает, если источники недоступны через maven. Но большинство из них. Как я уже говорил в своем посте, речь идет только о компонентах с открытым исходным кодом. – gorootde

+0

Кстати, ['dependency: sources'] (https://maven.apache.org/plugins/maven-dependency-plugin/sources-mojo.html) разрешает источники для всех зависимостей вашего проекта (включая транзитивные). Поэтому я не уверен, почему вы говорите, что это не рекурсивно. – Tunaki

ответ

0

Решение найдено:

    <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-dependency-plugin</artifactId> 
         <version>2.9</version> 
         <executions> 
          <execution> 
           <id>get-dependency-sources</id> 
           <phase>package</phase> 
           <goals> 
            <goal>copy-dependencies</goal> 
           </goals> 
           <configuration> 
            <outputDirectory>${sources.directory}</outputDirectory> 
            <classifier>sources</classifier> 
            <prependGroupId>true</prependGroupId> 
           </configuration> 
          </execution> 
         </executions> 
        </plugin> 

в сочетании с

   <plugin> 
        <artifactId>maven-antrun-plugin</artifactId> 
        <version>1.7</version> 
        <executions> 
         <execution> 
          <id>unpack-sources</id> 
          <phase>package</phase> 
          <goals> 
           <goal>run</goal> 
          </goals> 
          <configuration> 
           <target> 
            <move todir="${sources.directory}"> 
              <fileset dir="${sources.directory}"> 
              <include name="**/*.jar"/> 
             </fileset> 
             <mapper type="glob" from="*.jar" to="*.zip"/> 
            </move> 
           </target> 

          </configuration> 
         </execution> 
         ... 

Первый собирает все ресурсы в пределах ${sources.directory}, а затем переименовывает банки застегнуть файлов (что позволяет «нормальный» пользователю просматривать их содержимое в Windows Explorer. В качестве альтернативы вы также можете напрямую разархивировать банки с помощью задачи ANT .

Смежные вопросы