POM中没有插件,但仍由Maven调用
我有一个POM中没有插件,但仍由Maven调用,maven,maven-surefire-plugin,Maven,Maven Surefire Plugin,我有一个pom.xml文件,我对一个依赖项和一个插件进行了注释。在此之后,我刷新并重新导入,但插件仍然可以工作。我不明白为什么,因为它在pom.xml中不存在 实际上,我试图更改Surefire插件的输出目录,但它始终是target/Surefire <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:
pom.xml
文件,我对一个依赖项和一个插件进行了注释。在此之后,我刷新并重新导入,但插件仍然可以工作。我不明白为什么,因为它在pom.xml
中不存在
实际上,我试图更改Surefire插件的输出目录,但它始终是target/Surefire
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>TEST</groupId>
<artifactId>TEST</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<!--<org.apache.maven.surefire.version>2.19.1</org.apache.maven.surefire.version>-->
</properties>
<!--<reporting>-->
<!--<plugins>-->
<!--<plugin>-->
<!--<groupId>org.apache.maven.plugins</groupId>-->
<!--<artifactId>maven-surefire-report-plugin</artifactId>-->
<!--<version>2.19.1</version>-->
<!--</plugin>-->
<!--</plugins>-->
<!--</reporting>-->
<dependencies>
<!--<dependency>-->
<!--<groupId>org.apache.maven.surefire</groupId>-->
<!--<artifactId>surefire</artifactId>-->
<!--<version>${org.apache.maven.surefire.version}</version>-->
<!--<type>pom</type>-->
<!--</dependency>-->
</dependencies>
</project>
4.0.0
试验
试验
1.0-快照
对这个问题有一些误解。让我们检查一下
为什么在我注释依赖项时调用插件?
因为
对插件的执行没有任何影响。这用于声明项目所依赖的内容,以便编译和运行它。它独立于项目的实际构建过程,项目的实际构建过程由Maven启动,并调用多个插件来执行一些任务,如执行实际编译或复制文件等
当我注释掉插件时,为什么要调用它?!
这一解释依赖于这种现象的存在。简单地说,生命周期由几个阶段组成,这些阶段本身由插件目标组成。可能有多个生命周期,但是默认的生命周期是中心生命周期,通常控制项目的打包和部署。这些阶段是,例如,compile
表示编译项目源代码的阶段,或package
表示将项目打包为可交付成果的阶段,或test
表示项目的单元测试
而且,默认情况下,已经绑定到default
生命周期的各个阶段(取决于包装)。您会注意到:
test
:surefire:test
这意味着,在default
生命周期的test
阶段(对于某些打包),将调用目标surefire:test
(另请参见)。这就是您在这里看到的:,它的前缀是surefire
,上面使用过,它有一个名为的目标,其目的是运行项目的测试类
还有第二个考虑。上面的解释引用了POM的
元素中声明的。您注释掉的实际上是,它包含为您的项目生成网站时调用的报告插件
实际问题
实际上,我尝试更改surefire插件的输出目录
您可以通过配置maven-surefire插件
,默认情况下,该插件为target/surefire报告
。在您的案例中,这看起来像:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<build>
...
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<reportsDirectory>target/someDirectory</reportsDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>
...
maven surefire插件
2.19.1
目标/someDirectory
注意这是如何放置在
中以配置构建插件的。您可以省略org.apache.maven.plugins
,这是默认值
最佳实践是,生成过程中生成的所有文件(如Surefire报告)都放在目标
,或者更一般地说,放在生成目录中(可以通过${project.build.directory}
属性以通用方式获得)。对于这个问题存在一些误解。让我们检查一下
为什么在我注释依赖项时调用插件?
因为
对插件的执行没有任何影响。这用于声明项目所依赖的内容,以便编译和运行它。它独立于项目的实际构建过程,项目的实际构建过程由Maven启动,并调用多个插件来执行一些任务,如执行实际编译或复制文件等
当我注释掉插件时,为什么要调用它?!
这一解释依赖于这种现象的存在。简单地说,生命周期由几个阶段组成,这些阶段本身由插件目标组成。可能有多个生命周期,但是默认的生命周期是中心生命周期,通常控制项目的打包和部署。这些阶段是,例如,compile
表示编译项目源代码的阶段,或package
表示将项目打包为可交付成果的阶段,或test
表示项目的单元测试
而且,默认情况下,已经绑定到default
生命周期的各个阶段(取决于包装)。您会注意到:
test
:surefire:test
这意味着,在default
生命周期的test
阶段(对于某些打包),将调用目标surefire:test
(另请参见)。这就是您在这里看到的:,它的前缀是surefire
,上面使用过,它有一个名为的目标,其目的是运行项目的测试类
还有第二个考虑。上面的解释引用了POM的
元素中声明的。您注释掉的实际上是,它包含为您的项目生成网站时调用的报告插件
实际问题
实际上,我尝试更改surefire插件的输出目录
您可以通过配置maven-surefire插件
,默认情况下,该插件为target/surefire报告
。在您的案例中,这看起来像:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<build>
...
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<reportsDirectory>target/someDirectory</reportsDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>
...
maven surefire插件
2.19.1
目标/someDirectory
注意这是怎么回事