Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
POM中没有插件,但仍由Maven调用_Maven_Maven Surefire Plugin - Fatal编程技术网

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
注意这是怎么回事