2016-11-09 2 views
1

Я пытаюсь построить тощую войну для последующего включения в большой файл уха. Ушная сборка полностью отделена от моего проекта войны и ожидает, что я предоставил бы тощую войну, с правильным файлом манифеста, ухо обещает поставлять предоставленные банки в свою папку root/libs.maven-war-plugin как исключить предоставленный jar из каталога lib, но включить в манифест с папкой с префиксом

Проблема, с которой я столкнулась, - получить файл manifest.mf в войне, чтобы указать, что предоставленные jar находятся в папке уха/libs, а комбайны/исполняемые файлы находятся в состоянии войны. т.е. запись manifest.mf класса путь хочет выглядеть следующим образом:

Class-Path: libs/commons-lang.jar commons-codec.jar 

Обще-Ланг области видимости при условии, и, как ожидается, будет в директории LIBS в уха.

commons-codec - это время компиляции и ожидается, что оно станет частью войны.

Я исследовал Maven войны-плагин, но не могу понять, как заставить его поставить classpathPrefix всего за предоставленные зависимостей.

Предложения, пожалуйста?


Окончательное решение принимается (спасибо всем советы и ссылки) Требуется зависимости, предоставляемые уха быть ограничена, чтобы при условии, и это заметил хак: фальшивый-application.xml:

<plugin> 
    <!--required to fix the war's manifest and skinny the war--> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-ear-plugin</artifactId> 
    <version>2.10.1</version> 
    <configuration> 
     <defaultLibBundleDir>lib/</defaultLibBundleDir> 
     <skinnyWars>true</skinnyWars> 
     <generateApplicationXml>true</generateApplicationXml> 
     <applicationXml>${project.basedir}/src/test/fake-ear/fake-application.xml</applicationXml> 
    </configuration> 
    <executions> 
     <execution> 
      <phase>verify</phase> 
      <goals><goal>ear</goal></goals> 
     </execution> 
    </executions> 
</plugin> 

я затем развернуть эту новую тощую войну в хранилище и не так, используя Maven развёртывать плагин:

<plugin> 
    <!--used in release build to deploy skinny war to nexus--> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-deploy-plugin</artifactId> 
    <version>2.8.2</version> 
    <executions> 
     <execution> 
      <id>deploy-file</id> 
      <phase>install</phase> 
      <goals> 
       <goal>deploy-file</goal> 
      </goals> 
      <configuration> 
       <!--location of the skinny war after maven-ear-plugin builds it--> 
       <file>${project.build.directory}/${project.artifactId}-${project.version}/${artifactid}-${project.parent.version}.war</file> 
       <repositoryId>releases</repositoryId> 
       <url>${distributionManagement.repository.url}</url> 
       <groupId>${project.parent.groupId}</groupId> 
       <artifactId>${artifactid}</artifactId> 
       <version>${project.parent.version}</version> 
       <packaging>war</packaging> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+0

Вы хотите посмотреть на EAR плагин Maven, так как вы хотите, чтобы создать EAR. Он поддерживает кожные войны, и он правильно перезаписывает манифест каждой WARs. Http://maven.apache.org/plugins/maven-ear-plugin/examples/skinny-wars.html – Tunaki

+0

Но в противном случае вам нужно передать ' true 'для вашей конфигурации' ', см. связанный вопрос. – Tunaki

ответ

0

@maven-ear-plugin предложение Tunaki кажется лучше целостный образ, но в любом случае посмотрите: https://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html

Вы можете модифицировать манифест следующим образом:

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>2.4.3</version> 
     <executions> 
      <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <transformers> 
       <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
        <manifestEntries> 
        <Class-Path>libs/commons-lang.jar commons-codec.jar</Class-Path> 
        </manifestEntries> 
       </transformer> 
       </transformers> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 
+0

Это не «холистическая манера», это единственный способ, который действительно работает. У этого есть много побочных эффектов: он работает только для 1 WAR, он упаковывает все классы в корневой каталог WAR, вам нужно написать каждую зависимость самостоятельно ... Все это, вероятно, не нужно. – Tunaki

+0

@ Tunaki Я на самом деле упомянул ваше предложение как лучшее в целостной манере. Mine - это всего лишь локальное решение WAR. Возможно, OP может рассказать нам, что ему нужно. – nandsito

+0

. Лучше локальное исправление WAR, чем это ... См. Связанный вопрос, вы можете настроить манифест напрямую с помощью плагина WAR. – Tunaki

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