Maven - 抑制[警告] JAR将为空 - 没有内容标记为包含在pom.xml中

sil*_*ver 11 java junit maven

我的maven项目故意只需要src/test/javasrc/test/resources.删除src/main/*文件夹后,出现预期警告mvn verify:

[WARNING] JAR will be empty - no content was marked for inclusion!
[INFO] Building jar: D:\dev\java\my-project\target\my-project-0.0.1-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)

除了有一个带有空main()方法的类之外,如何抑制此警告src/main/java

编辑:

作为-q抑制警告,如果这可以通过编程方式完成,那将是一个后续行动pom.xml.

df7*_*899 8

警告实际上是基于它是否可以找到<classesDirectory>默认配置的target\classes

这意味着绕过警告的一种简单方法是将其指向另一个故意为空的目录:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <classesDirectory>dummy</classesDirectory>
            </configuration>
        </plugin>
    </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

或者,为了避免需要空目录,请从另一个目录中排除所有内容:

        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <classesDirectory>src</classesDirectory>
                <excludes>
                    <exclude>**</exclude>
                </excludes>
            </configuration>
        </plugin>
Run Code Online (Sandbox Code Playgroud)


neX*_*Xus 6


对于不包含生产代码但包含测试的项目,这是(据我所知)最干净的解决方案:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <skipIfEmpty>true</skipIfEmpty>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>
Run Code Online (Sandbox Code Playgroud)

它表明你想要什么:

  • 跳过尝试将“无生产代码”打包到 jar 中
  • 不要尝试安装/部署不存在的 jar

保持测试执行不变。


就像@John Camerin提到的那样,<packaging>pom</packaging>
除非你的 pom 唯一应该做的就是收集依赖项,否则不建议使用它。
否则,如果您有测试,它们将在没有警告的情况下被跳过,这不是您想要的。


sil*_*ver 5

这两种解决方案都以编程方式抑制了警告消息。

解决方案1:

<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-jar-plugin -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.1.0</version>
    <!-- Ignore src/main in JAR packaging -->
    <configuration>
        <classesDirectory>src</classesDirectory>
        <excludes>
            <exclude>main</exclude>
        </excludes>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

解决方案2:

由于上述内容基本上创建了一个空的 JAR(并且我并不真的想包含测试类和测试资源),因此我选择“跳过”JAR 创建。

避免 maven-jar 的最佳方法是什么?

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <id>default-jar</id>
            <phase>none</phase>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)