2016-11-09 2 views
1

とマニフェストに含まれています。 耳のビルドは私の戦争のプロジェクトとはまったく別物であり、正確なマニフェストファイルを使って痩せた戦争を提供することを期待しています。耳はroot/libsフォルダに提供されたjarファイルを提供することを約束します。私が直面していますのmaven-戦争 - プラグインかlibディレクトリから提供されたjarファイルを除外することが、私は、大きな耳のファイルの後の包含のためのスキニー戦争を構築しようとしていますプレフィックスフォルダ

問題は、提供瓶のは、耳の/ libsのフォルダにあることを指定し、/ランタイムjarファイルをコンパイルするために、戦争のMANIFEST.MFファイルを取得している戦争です。 つまりMANIFEST.MFクラスパスエントリは次のようになりたい:

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

コモンズ-LANG提供し、耳のlibsディレクトリにあると期待にスコープされます。

コモンズ・コーデックは、時間をコンパイルし、戦争の一部であることが予想されます。

私はの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プラグインを見てみたいです。それは皮むき戦争をサポートしており、各WARのマニフェストを正しく書き換えます。http://maven.apache.org/plugins/maven-ear-plugin/examples/skinny-wars.html – Tunaki

+0

しかし、そうでない場合は、あなたの ' '設定が機能するためには、 true'を参照してください。 – Tunaki

答えて

0

Tunakiのmaven-ear-plugin提案@することで良さそうです総合的なやり方は、とにかく見てみましょう: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

@屯aki私は実際にあなたの提案を全体的な方法でより良いものとして言及しました。 MineはローカルのWAR修正です。多分、OPが彼または彼女が何を望んでいるか教えてくれるでしょう – nandsito

+0

これよりも良いローカルWARの修正があります...リンクされた質問を見ると、WARプラグインでマニフェストを直接カスタマイズすることができます。 – Tunaki

関連する問題