覆盖从 Maven 导入继承的 maven-surefire-plugin 版本

Bas*_*que 1 intellij-idea pom.xml maven maven-surefire-plugin

我的项目由 Maven 驱动,使用不是我自己制作的 POM(来自 Vaadin)。显然,我在项目中看到的 POM 文件依赖于其他 POM 文件的某种继承。虽然我在自己的 POM 中没有看到 的依赖项maven-surefire-plugin,但在我的项目中找到了这个工件,正如您在 IntelliJ 2019 的屏幕截图的右侧看到的那样。

\n\n

在此输入图像描述

\n\n

我不是 Maven maven,所以我不知道确切的细节,但在查探中我发现了一些import行,所以我猜测 Maven POM 可以动态地从其他 POM 继承。

\n\n

问题是我的项目中存在的版本maven-surefire-plugin相当旧,版本 2.12.4。我正在尝试运行JUnit 5,它需要 2.22.0或更高版本。当前版本是3.0.0-M3.

\n\n

查看粉色箭头的左端,您可以看到我dependency在 POM 中添加了一个元素。

\n\n
    <dependency>\n        <groupId>org.apache.maven.plugins</groupId>\n        <artifactId>maven-surefire-plugin</artifactId>\n        <version>3.0.0-M3</version>\n    </dependency>\n
Run Code Online (Sandbox Code Playgroud)\n\n

在左箭头提示上,我要求3.0.0-M3尝试覆盖2.12.4右箭头提示上看到的神秘导入/继承的指定版本。但我的尝试失败了,因为旧版本在执行 Maven后仍然存在cleaninstall我什至尝试重新启动 IntelliJ。但不行,运行 Maven 时我的 JUnit 5 测试仍然被忽略test

\n\n

\xe2\x9e\xa5 是否有某种方法可以覆盖显然从某些神秘来源继承的依赖项的版本?

\n\n

这是我在尝试添加<artifactId>maven-surefire-plugin</artifactId>依赖项失败之前的 POM。

\n\n
<?xml version="1.0" encoding="UTF-8"?>\n<project xmlns="http://maven.apache.org/POM/4.0.0"\n         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>com.basilbourque.acmeapp</groupId>\n    <artifactId>acmeapp</artifactId>\n    <name>AcmeApp</name>\n    <version>1.0-SNAPSHOT</version>\n    <packaging>war</packaging>\n\n    <properties>\n        <maven.compiler.source>11</maven.compiler.source>\n        <maven.compiler.target>11</maven.compiler.target>\n        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n        <failOnMissingWebXml>false</failOnMissingWebXml>\n\n        <!--<vaadin.version>11.0.1</vaadin.version>-->\n        <!--<vaadin.version>12.0.0.beta1</vaadin.version>-->\n        <vaadin.version>13.0.0.alpha3</vaadin.version>\n    </properties>\n\n    <repositories>\n        <!-- Repository used by many Vaadin add-ons -->\n        <repository>\n            <id>Vaadin Directory</id>\n            <url>http://maven.vaadin.com/vaadin-addons</url>\n        </repository>\n\n        <repository>\n            <id>vaadin-prereleases</id>\n            <url>https://maven.vaadin.com/vaadin-prereleases</url>\n        </repository>\n\n    </repositories>\n\n    <pluginRepositories>\n        <!-- Repository needed for prerelease versions of Vaadin -->\n        <pluginRepository>\n            <id>vaadin-prereleases</id>\n            <url>https://maven.vaadin.com/vaadin-prereleases</url>\n        </pluginRepository>\n    </pluginRepositories>\n\n    <dependencyManagement>\n        <dependencies>\n            <dependency>\n                <groupId>com.vaadin</groupId>\n                <artifactId>vaadin-bom</artifactId>\n                <type>pom</type>\n                <scope>import</scope>\n                <version>${vaadin.version}</version>\n            </dependency>\n        </dependencies>\n    </dependencyManagement>\n\n    <dependencies>\n        <dependency>\n            <groupId>com.vaadin</groupId>\n            <artifactId>vaadin-core</artifactId>\n        </dependency>\n\n        <!-- Added to provide logging output as Flow uses -->\n        <!-- the unbound SLF4J no-operation (NOP) logger implementation -->\n        <dependency>\n            <groupId>org.slf4j</groupId>\n            <artifactId>slf4j-simple</artifactId>\n        </dependency>\n\n        <dependency>\n            <groupId>javax.servlet</groupId>\n            <artifactId>javax.servlet-api</artifactId>\n            <!--<version>3.1.0</version>-->\n            <version>4.0.1</version>\n            <scope>provided</scope>\n        </dependency>\n\n        <!--JUnit 5-->\n        <dependency>\n            <groupId>org.junit.jupiter</groupId>\n            <artifactId>junit-jupiter</artifactId>\n            <version>5.4.0-RC1</version>\n        </dependency>\n    </dependencies>\n\n    <build>\n        <plugins>\n            <!-- Jetty plugin for easy testing without a server -->\n            <plugin>\n                <groupId>org.eclipse.jetty</groupId>\n                <artifactId>jetty-maven-plugin</artifactId>\n                <version>9.4.14.v20181114</version>\n                <configuration>\n                    <scanIntervalSeconds>1</scanIntervalSeconds>\n                </configuration>\n            </plugin>\n        </plugins>\n    </build>\n\n    <profiles>\n        <profile>\n            <!-- Production mode can be activated with either property or profile -->\n            <id>production-mode</id>\n            <activation>\n                <property>\n                    <name>vaadin.productionMode</name>\n                </property>\n            </activation>\n            <properties>\n                <vaadin.productionMode>true</vaadin.productionMode>\n            </properties>\n\n            <dependencies>\n                <dependency>\n                    <groupId>com.vaadin</groupId>\n                    <artifactId>flow-server-production-mode</artifactId>\n                </dependency>\n            </dependencies>\n\n            <build>\n                <plugins>\n                    <plugin>\n                        <groupId>com.vaadin</groupId>\n                        <artifactId>vaadin-maven-plugin</artifactId>\n                        <version>${vaadin.version}</version>\n                        <executions>\n                            <execution>\n                                <goals>\n                                    <goal>copy-production-files</goal>\n                                    <goal>package-for-production</goal>\n                                </goals>\n                            </execution>\n                        </executions>\n                    </plugin>\n                </plugins>\n            </build>\n        </profile>\n    </profiles>\n</project>\n
Run Code Online (Sandbox Code Playgroud)\n

Bas*_*que 5

指定<plugin>, 不<dependency>

虽然我不是 Maven 专家,但解决方案似乎是<artifactId>maven-surefire-plugin</artifactId>plugin元素中指定,而不是在dependency元素中指定。

删除您添加的<dependency>.

查找<plugins>POM 的(复数)部分,其中包含<pluginJetty 的一个元素。添加第二个plugin元素:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M3</version>
            </plugin>
Run Code Online (Sandbox Code Playgroud)

然后做一个 Mavencleaninstall. 您应该会看到新版本出现在IntelliJ 的Maven面板中。

在此输入图像描述

您现在可以执行 Maventest以查看执行的 JUnit 5 测试。

如果您觉得需要,可以通过覆盖导入的 POM 来更新屏幕截图右侧列出的所有插件。

        <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-clean-plugin -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-clean-plugin</artifactId>
            <version>3.1.0</version>
        </plugin>

        <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
        </plugin>

        <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-deploy-plugin -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <version>3.0.0-M1</version>
        </plugin>

        <!--https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-install-plugin-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <version>3.0.0-M1</version>
        </plugin>

        <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-resources-plugin -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.1.0</version>
        </plugin>

        <!--https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-war-plugin-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.2.2</version>
        </plugin>

        <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-site-plugin -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-site-plugin</artifactId>
            <version>3.7.1</version>
        </plugin>

        <!--https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-surefire-plugin-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.0.0-M3</version>
        </plugin>
Run Code Online (Sandbox Code Playgroud)