我的maven项目“故意”只需要src/test/java
和src/test/resources
。删除src/main/*
文件夹后,预期的警告出现在mvn verify
上:
[WARNING] JAR will be empty - no content was marked for inclusion!
[INFO] Building jar: D:devjavamy-projecttargetmy-project-0.0.1-SNAPSHOT.jar
除了src/main/java
中具有空main()
方法的类之外,如何抑制此警告?
编辑:
由于-q
抑制了该警告,因此后续的问题是,这是否可以在pom.xml
中以编程方式完成?
6条答案
按热度按时间syqv5f0l1#
这(在我看来)是最干净的解决方案。
对于不包含生产代码但包含测试的项目:
它表明您想要什么:
使测试执行保持不变。
就像@John Camerin提到的那样,不建议使用
<packaging>pom</packaging>
除非您的POM唯一应该做的就是收集依赖项。
否则,如果您有测试,它们将在没有警告的情况下被跳过,这不是您想要的。
更短的替代方案
其中一些配置参数绑定了用户属性:
maven-jar-plugin
的skipIfEmpty
参数遗憾地没有链接到任何用户属性maven-install-plugin
的skip
参数从maven.install.skip
获取其值maven-deploy-plugin
的skip
参数从maven.deploy.skip
获取其值这意味着pom可以缩短到
fzsnzjdm2#
该警告实际上是基于它是否可以找到配置的
<classesDirectory>
-默认情况下为target\classes
。这意味着绕过该警告的一种简单方法是将其指向另一个故意为空的目录:
或者,为了避免需要空目录,可以从另一个目录中排除所有内容:
x6492ojm3#
这两个解决方案都以编程方式隐藏了警告消息。
方案一:
方案二:
由于上面实际上创建了一个空的JAR(我并不真的想包括测试类和测试资源),所以我选择“跳过”JAR创建。
What is the best way to avoid maven-jar?
lx0bsm1f4#
其他解决方案对我来说似乎都不是特别有吸引力,所以我的解决方案是添加一个包含解释的文件
src/main/resources/dummy
:至少这不会在
pom.xml
中产生任何噪音,并且不会有任何关于文件用途的误解。它会生成一个包含该文件的JAR,但在我的例子中这不是问题。7cjasjjr5#
如果您要做的只是收集依赖项,则可以添加
<packaging>pom</packaging>
以更改默认的JAR打包。然而,根据您问题中的上下文,拥有src/test/Java和src/test/Resources文件夹会让我相信您的组件只是测试?将 Package 更改为POM将使测试无法从maven运行。如果这确实是您的用例,那么您似乎正在尝试跳过 Package 。实现这一点的最好方法是将模块打包的插件绑定到None阶段,因为没有办法跳过maven生命周期的包阶段。这被确定为上面的解决方案1。
sg3maiej6#
最简单也是最好的解决方案是将测试代码保存在
src/main/java
中,是的,这不是一个打字错误。此外,如果它是测试框架,则测试框架本身必须具有测试,因此从用户的Angular 将生产性代码的测试定位到src/main/java
和将测试定位到src/test/java
是有意义的。从用户的Angular 来看,它将只是您应该在其中定义
<scope>test</scope>
的JAR文件。这将解决所有问题,不需要任何补充配置,也不会更改任何默认设置,也不会违反约定。