从生成的jar文件

时间:2015-10-01 12:19:19

标签: java maven maven-shade-plugin

我正在尝试创建一个jar文件,其中包含jar中提取的所有必需类。但对于像log4j这样的依赖jar很少,它会在META-INF/maven/*中创建一些文件夹。我有一个限制,我将放置生成的jar文件的服务器将不具有Internet连接。因此,如果此META-INF/maven/*文件夹中有任何内容,则会出现错误。

我的maven描述符如下所示

<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <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>
                    <addMavenDescriptor>false</addMavenDescriptor>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <minimizeJar>true</minimizeJar>
                <finalName>myclient</finalName>
            </configuration>
        </plugin>
    </plugins>
</build>

我能够在生成的jar中提取所需的类文件,但maven文件夹仍在META-INF下生成。我必须手动删除文件夹才能使一切正常。请提供有关如何从生成的jar文件中自动删除maven文件夹的建议。

2 个答案:

答案 0 :(得分:13)

您可以在maven-shade-plugin配置中使用filters来排除每个工件META-INF/maven下的所有内容:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.4.1</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <filters>
                    <filter>
                        <artifact>*:*</artifact>
                        <excludes>
                            <exclude>META-INF/maven/**</exclude>
                        </excludes>
                    </filter>
                </filters>
            </configuration>
        </execution>
    </executions>
</plugin>

可以找到maven-jar-plugin的解决方案here

答案 1 :(得分:0)

简单地将其添加到一个jar,war,ear插件

<configuration>
   ....
  <archive>
    <addMavenDescriptor>false</addMavenDescriptor>
   </archive>
   ....
</configuration>