2016-02-04 50 views
2

有這個Maven的模塊,說PRJ封裝模塊,封裝項目工件到使用maven具組件插件tar文件。在prj-package-module/pom.xml中還添加了作爲依賴項的jar並打包到tar文件中。Maven的組裝插件:添加一個文件到相關性JAR

現在的要求是包裝成tar文件前一個文件,PRJ-pakacge模塊/ src目錄/主/資源/ file.xml添加到這些依賴罐子之一。我怎樣才能做到這一點?

編輯:該文件是一個JNLP,其中包含動態添加的依賴關係jar列表。出於安全原因,Javaws還需要在JNLP文件中添加一個jar文件和要簽名的jar文件。這是我遇到問題的地方。

+0

澄清:你需要添加一個文件到一個外部庫,一個maven的依賴jar? –

+0

是的。該文件將被插入到jar文件中,該文件文件在pom.xml中作爲maven依賴項添加 –

+0

您需要的文件被列爲依賴項,並且它不在tar生成的文件中?這很奇怪...... –

回答

0

看來,你想它打包到項目的最終神器之前修改Maven項目的依賴。 這是狡猾的。如果該jar /庫(dependency)是你的,那麼修改該jar的pom,重建它,然後讓當前項目解析最新的工件。如果,否則,依賴jar不是你的,那麼在當前項目中有足夠的資源(prj-pakacge-module/src/main/resources/file.xml)因爲最終的結果將是相同的(只要裝配插件被設置爲將目標超級/胖罐中的所有工件罐變平)...

3

這是一個maven解決方案,用於動態解包現有的依賴關係,將資源添加(複製)到解壓後的文件夾中,重新打包(jar)這個洞,然後獲得初始jar的修改副本。

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

什麼它實際上是這樣做的:

運行上面的例子中,junit-modified.jar文件將出現在Maven項目的target文件夾。

上述插件的配置順序是重要的尊重步驟的流程作爲相同相中的一部分。

然後,你有一個額外的文件添加到您的脂肪罐子,這的確是改進的瓶你可能尋找。


如果你並不需要一個動態的方法,更好的辦法是做一次,有一個機密版本的依賴在this other SO post解釋。

或者,將其移動到Maven profile,以便至少它不是默認構建的一部分。

+0

@KiranMohan對此有幫助嗎? –

相關問題