在我的最近一次面试中,我被问到设置Maven中以下属性的影响:
- -DskipTests
- -Dmaven.test.skip=true
- -Dmaven.test.skip=null
我知道相比于第一个点,第二个点只是跳过了编译测试,但是第三个点有什么影响呢?
-Dmaven.test.skip=null
在我的最近一次面试中,我被问到设置Maven中以下属性的影响:
我知道相比于第一个点,第二个点只是跳过了编译测试,但是第三个点有什么影响呢?
-Dmaven.test.skip=null
-Dmaven.test.skip=null
,Maven Surefire插件尝试将null
转换为boolean
,由于无法完成此操作,插件会回退到该属性的默认值:false
。-Dmaven.test.skip=null
等同于 -Dmaven.test.skip=false
或更简洁地说; 它相当于未指定 maven.test.skip
属性。除了true
之外的任何值都会使Maven构建的行为表现得好像未提供系统变量或将其设置为false
一样。因此,在执行Maven构建时,测试将运行。
由于您基本上设置了一个系统属性,因此它取决于实际的Maven插件。
maven.test.skip
属性受surefire、failsafe和编译器插件的支持,请参见here
所以您必须了解这些实现-好吧...别想了。
我想这个问题真正的意思是,如果将系统属性设置为null
,它会有任何影响吗?
是的,它有影响。
zarathustra@hel ~ % java -Dfancy=true -Dmaven.test.skip=null -XshowSettings:properties -version
Property settings:
awt.toolkit = sun.lwawt.macosx.LWCToolkit
fancy = true
file.encoding = UTF-8
file.encoding.pkg = sun.io
...
maven.test.skip = null
...
顺便提一下,据我所知,您还可以编写-DskipTests=true
,这与-DskipTests
相同;)