2

我创建了一个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>

这是我得到的罐子

4

2 回答 2

6

这是罪魁祸首:

    <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 资源插件,尤其是包含/排除示例

于 2014-09-28T13:21:50.350 回答
2

是否有充分的理由将maven-jar-plugin:jar目标compile明确地绑定到阶段?编译阶段旨在“编译项目的源代码”,仅此而已。

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

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

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

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

于 2014-09-28T13:05:40.163 回答