2014-02-10 45 views
7

我的项目结构在src/main /文件夹中有资源文件夹。资源文件夹包含文件server.properties。我的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>com.fde</groupId> 
    <artifactId>Listener</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>Listener</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <hibernate.version>3.6.10.Final</hibernate.version> 
     <java.version>1.6</java.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 
     <!-- Hibernate dependencies START --> 
     <dependency> 
      <groupId>commons-lang</groupId> 
      <artifactId>commons-lang</artifactId> 
      <version>2.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-ehcache</artifactId> 
      <version>${hibernate.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>${hibernate.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>javassist</groupId> 
      <artifactId>javassist</artifactId> 
      <version>3.12.1.GA</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-collections</groupId> 
      <artifactId>commons-collections</artifactId> 
      <version>3.2.1</version> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.9</version> 
     </dependency> 
     <!-- Hibernate dependencies END --> 
    </dependencies> 
    <build> 
     <sourceDirectory>src/main/java</sourceDirectory> 
     <resources> 
      <resource> 
       <directory>resources</directory> 
      </resource> 
     </resources> 
     <testSourceDirectory>src/test/java</testSourceDirectory> 

     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-shade-plugin</artifactId> 
       <version>2.2</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
         <configuration> 
          <transformers> 
           <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
            <mainClass>com.fde.ListenerServer</mainClass> 
           </transformer> 
           <transformer implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer"> 
            <resource>resources</resource> 
            <file>server.properties</file> 
           </transformer> 
          </transformers> 
          <artifactSet> 
           <excludes> 

            <exclude>junit:junit</exclude> 

           </excludes> 
          </artifactSet> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

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

Jar已正确创建,主类在清单中提到。我有以下问题:

  1. 目标文件夹包含类文件夹whch有类文件。该罐子也包含它们,为什么他们需要。我的目标是只有一个可执行的jar包含所有依赖项。

  2. 资源没有被添加到jar中。我已经根据网上看到的说明添加了变压器,但没有用!

  3. 在目标文件夹中创建的其他目录(maven-archiver,surefire,surefire-reports等)?

  4. 另一个罐子被创建每次我做一个maven干净的安装(原来的监听.... JAR)

时候,我绝对没有关于如何将资源线索。任何帮助表示赞赏!

EDIT :::

这是我用于行家组装-插件标记:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <executions> 
     <execution> 
     <phase>package</phase> 
     <goals> 
      <goal>attached</goal> 
     </goals> 
     </execution> 
    </executions> 
    <configuration> 
    <archive> 
      <manifest> 
       <mainClass>com.fde.ListenerServer</mainClass> 
      </manifest> 
      </archive> 
     <descriptorRefs> 
     <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
    </configuration> 
    </plugin> 

这创造监听-1.0-快照罐与 - dependencies.jar与所有来自文件夹中引用的jar的类。清单还包含主类。

问题仍然是我不能将资源包包含在\ src \ main \ resources文件夹中。

另外我不明白为什么从我的代码中引用的jar文件包含在jar以及META-INF文件夹中。

+0

您是否尝试过使用jar-with-dependencies描述符的maven-assembly-plugin? – khmarbaise

+0

看到我的编辑问题 – kavita

回答

5

我从pom.xml中删除了以下内容,属性文件包含在根目录下。

<sourceDirectory>src/main/java</sourceDirectory> 
    <resources> 
     <resource> 
     <directory>resources</directory> 
     </resource> 
    </resources> 
    <testSourceDirectory>src/test/java</testSourceDirectory> 

还没有想出为什么在罐子里重复引用的类。

3

的问题是不是在你的Maven遮阳帘插件的配置,而你已经明确设置资源目录到错误的路径:

<!-- wrong --> 
    <resource>  
     <directory>resources</directory> 
    </resource> 

由于<directory>元素的医生说:“说明所在的目录资源被存储相对于POM,路径是 。“

所以,如果你按照默认的Maven的项目结构,你必须这样设置:

<!-- correct --> 
    <directory>src/main/resources</directory> 

或不设置它,那么它回落到相同的Maven的默认值。

相关问题