【问题标题】:How do I exclude java files from a jar in maven-jar-plugin?如何从 maven-jar-plugin 的 jar 中排除 java 文件?
【发布时间】:2014-11-22 20:49:30
【问题描述】:

我创建了一个 pom.xml 来编译我的项目并将其打包为 jar, 确实它编译并创建了 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>

【问题讨论】:

    标签: maven jar maven-jar-plugin


    【解决方案1】:

    这是罪魁祸首:

        <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

    【讨论】:

    • 解决方案确实是排除java:**/*.java,而不是像我以前那样:*.java
    • 我认为您已将此添加到 maven-jar-plugin 配置中?请注意,这样做只会从生成的 jar 文件中删除文件。与项目资源一起使用的任何其他插件仍将看到它们。在大多数情况下,这不会产生影响,但需要注意。
    【解决方案2】:

    是否有充分的理由将maven-jar-plugin:jar 目标明确绑定到compile 阶段?编译阶段的目的是"compile the source code of the project",没有别的。

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

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

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

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

    【讨论】:

      最近更新 更多