如何从maven-jar-plugin中的jar中排除java文件?

时间:2014-09-28 09:07:30

标签: maven jar maven-jar-plugin

我创建了一个 pom.xml 来编译我的项目并将其打包为jar, 确实它是comiples和jar被创建 - 问题是我有一个包含类和java的jar,我只想要里面的类。

如何丢失java文件?我不需要它们。

这是我创建的 pom.xml

<build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <finalName>api-interfaces</finalName>
        <plugins>
        <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <id>make-a-jar</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            <configuration>
          <excludes>
            <exclude>*.properties</exclude>
              <exclude>*.xml</exclude>
               <exclude>sql/**</exclude>
                <exclude>META-INF/**</exclude>
                 <exclude>*.jar</exclude>
                  <exclude>*.java</exclude>
                   <exclude>default-configs/**</exclude>

          </excludes>
          </configuration>
        </plugin>
       </plugins>
    </build>

this is the jar that i get

2 个答案:

答案 0 :(得分:5)

这是罪魁祸首:

    <resources>
        <resource>
            <directory>src/main/java</directory>
            <filtering>true</filtering>
        </resource>
    </resources>

有了这个,你明确指出src/main/java中的文件,即.java文件,应该包含在jar中。

您可以使用标准maven布局并将资源放入src/main/resources,或使用以下方法明确排除.java个文件:

    <resources>
        <resource>
            <directory>src/main/java</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>**/*.java</exclude>
            </excludes>
        </resource>
    </resources>

有关更多信息,请参阅maven resource plugin,尤其是include/exclude examples

答案 1 :(得分:2)

是否有充分理由明确将maven-jar-plugin:jar目标绑定到compile阶段?编译阶段仅针对"compile the source code of the project",而不是其他任何内容。

jar打包项目中,jar:jar目标默认绑定到package阶段,“获取已编译的代码并将其打包为可分发的格式,例如JAR。“

resources:resouces目标绑定到process-resources阶段,“将资源复制并处理到目标目录,准备打包。”

将默认目标绑定到非默认阶段更像是针对Maven而不是使用它。

通过使用@SillyFreak在他的回答中提到的src/main/resources,您可能根本不需要在POM中使用此构建步骤定义。