2

Этот модуль maven, скажем, prj-package-module, упаковывает артефакты проекта в файл tar с использованием maven-assembly-plugin. Кроме того, в файле prj-package-module/pom.xml добавлены банки в виде зависимостей и упакованы в файл tar.Плагин сборки maven: добавьте файл в банку зависимости

Теперь необходимо добавить файл, prj-pakacge-module/src/main/resources/file.xml в одну из этих банок зависимости, прежде чем упаковывать в файл tar. Как я могу это достичь?

Редактировать: Файл представляет собой JNLP, в который динамически добавляется список зависимых банок. По соображениям безопасности Javaws также требует, чтобы файл JNLP добавлялся в банку и банку, которая должна быть подписана. Именно здесь я столкнулся с проблемой.

+0

, чтобы уточнить: вам нужно добавить файл в банку, которая является внешней библиотекой, зависимостью от maven? –

+0

Да. файл должен быть вставлен в банку, которая добавляется как зависимость maven в pom.xml –

+0

Файл, который вы хотите, указан как зависимость, и он не находится в файле сгенерированного tar? Thats odd ... –

ответ

0

Кажется, что вы пытаетесь изменить зависимость проекта maven перед его упаковкой в ​​последний артефакт проекта. Это изворотливое. Если эта jar/library (зависимость) принадлежит вам, измените pom этой банки, перестройте ее, а затем удалите текущий проект с последним артефактом.

Если, в противном случае, байт зависимости не принадлежит вам, тогда этого достаточно, чтобы иметь ресурс (prj-pakacge-module/src/main/resources/file.xml) в текущем проекте (тот, который вы теперь, когда конечный результат будет таким же (при условии, что сборный плагин настроен на сглаживание всех артефактов в целевой uber/fat jar ...

3

Вот решение maven для динамической распаковки существующего зависимость, добавить (копию) ресурс в распакованную папку, упакуйте (банка) в отверстие и, таким образом получить модифицированную копию исходной баночки

файл образца POM делать точно, что для junit зависимости:.

<build> 
    <plugins> 
     <!-- unpack step --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.10</version> 
      <executions> 
       <execution> 
        <id>unpack</id> 
        <phase>prepare-package</phase> 
        <goals> 
         <goal>unpack</goal> 
        </goals> 
        <configuration> 
         <artifactItems> 
          <artifactItem> 
           <groupId>junit</groupId> 
           <artifactId>junit</artifactId> 
           <version>4.11</version> 
           <type>jar</type> 
           <outputDirectory>${project.build.directory}/unpack-tmp</outputDirectory> 
           <includes>**/*.class,**/*.xml</includes> 
          </artifactItem> 
         </artifactItems> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

     <!-- add the additional resource step --> 
     <plugin> 
      <artifactId>maven-resources-plugin</artifactId> 
      <version>2.7</version> 
      <executions> 
       <execution> 
        <id>copy-resources</id> 
        <phase>prepare-package</phase> 
        <goals> 
         <goal>copy-resources</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${basedir}/target/unpack-tmp</outputDirectory> 
         <resources> 
          <resource> 
           <directory>src/main/resources</directory> 
           <include>test.properties</include> 
          </resource> 
         </resources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

     <!-- repack step --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>2.6</version> 
      <executions> 
       <execution> 
        <id>repack</id> 
        <phase>prepare-package</phase> 
        <goals> 
         <goal>jar</goal> 
        </goals> 
        <configuration> 
         <classesDirectory>${basedir}/target/unpack-tmp</classesDirectory> 
         <finalName>junit-modified</finalName> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Что это на самом деле делает:

  • В рамках prepare-packagephase мы добавляем три шага, чтобы создать модифицированную баночку из зависимости
  • Первый шаг: распаковывать зависимость через Maven Dependency Plugin и его цель unpack: распакованная папка будет создана в папку tmp unpack-tmp
  • Второй шаг: копировать соответствующий ресурс через Maven Resources Plugin и его copy-resources цель.
  • Третий шаг: упаковывайте целое через Maven Jar Plugin и его классический jar цели

Запуск образца выше, файл junit-modified.jar появится в target папке проекта Maven.

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

Затем у вас есть один дополнительный файл для добавления в вашу жирную банку, которая действительно является модифицированной банкой, которую вы, вероятно, искали.


Если вам не нужен динамичный подход, лучший подход должен был бы сделать это один раз и имеют секретную версию этой зависимости, как описано в this other SO post.

В качестве альтернативы переместите его на Maven profile так, чтобы он, по крайней мере, не являлся частью сборки по умолчанию.

+0

@ КиранМохан помог? –

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