2011-10-03 106 views
3

我有一個與很多依賴關係的maven項目。 我想使用程序集插件將所有內容都打包在依賴項中,但我不會將所有依賴關係的jar包解壓縮成一團糟。我希望他們都進入lib文件夾,但我不知道如何添加類路徑。 我POM:maven程序集創建jar與依賴和類路徑

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>test.com</groupId> 
    <artifactId>simple-weather</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>simple-weather</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.14</version> 
     </dependency> 
     <dependency> 
      <groupId>dom4j</groupId> 
      <artifactId>dom4j</artifactId> 
      <version>1.6.1</version> 
     </dependency> 
     <dependency> 
      <groupId>jaxen</groupId> 
      <artifactId>jaxen</artifactId> 
      <version>1.1.1</version> 
     </dependency> 
     <dependency> 
      <groupId>velocity</groupId> 
      <artifactId>velocity</artifactId> 
      <version>1.5</version> 
     </dependency> 
     <dependency> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>exec-maven-plugin</artifactId> 
      <version>1.2</version> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 

        <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 

      <configuration> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
         <classpathPrefix>lib/</classpathPrefix> 
         <mainClass>adi.com.weather.Main</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 

     </plugin> 

      <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>make-assembly</id> 
         <phase>package</phase> 
         <goals> 
          <goal>attached</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <descriptors> 
         <descriptor>package.xml</descriptor> 
        </descriptors> 
       </configuration> 

      </plugin> 


     </plugins> 
    </build> 
</project> 

我的彙編文件

<?xml version="1.0" encoding="UTF-8"?> 
<assembly> 
    <id>test5</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
     <dependencySet> 
      <unpack>false</unpack> 
      <scope>runtime</scope> 
      <outputDirectory>lib</outputDirectory> 
     </dependencySet> 
    </dependencySets> 
    <fileSets> 
     <fileSet> 
      <directory>${project.build.outputDirectory}</directory> 
      <outputDirectory>/</outputDirectory> 

     </fileSet> 

    </fileSets> 
</assembly> 
+0

看起來你有正確的pom條目。哪裏有問題?罐子不會進入lib文件夾?清單有不正確的罐子路徑? – Raghuram

+0

清單中的classPath不起作用,但是我發現了一個soulution –

+3

不錯的作品Adi Mor。你能否自己發佈問題的答案,然後接受答案,以便我們能夠解決這個問題?另外,如果他們解決了您的問題,則需要接受以前問題的答案。 – Zecas

回答

0

他可能重新配置自己的Maven的依賴插件:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.10</version> 
      <executions> 
       <execution> 
        <id>copy</id> 
        <phase>package</phase> 
        <goals> 
         <goal>copy-dependencies</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${distDirectory}/lib</outputDirectory> 
         <includeScope>runtime</includeScope> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

現在,當你運行mvn package,所有的依賴罐子將會去target/lib(或任何你的distDirectory是)。

HTH

0

如果雖然你已經設置<addClasspath>true</addClasspath>,請確保您使用的是2.2版本或插件的更新的maven-JAR-插件未生成清單文件中的條目類路徑。

版本2.1中的bug MJAR-83似乎阻止插件列出Class-Path中的依賴關係。

相關問題