Переопределить версию maven-surefire-plugin, унаследованную от импорта Maven - PullRequest
0 голосов
/ 29 января 2019

Мой проект управляется Maven, используя POM не моего собственного производства ( от Vaadin ).Очевидно, что файл POM, который я вижу в своем проекте, зависит от некоторого вида наследования других файлов POM.Хотя я не вижу зависимости для maven-surefire-plugin в моем собственном POM, этот артефакт обнаружен в моем проекте, как вы можете видеть на правой стороне этого скриншота из IntelliJ 2019.

enter image description here

Я не Maven Maven, поэтому я не знаю точных деталей, но, обнюхивая, я нашел несколько import линий, поэтому я предполагаю, что Maven POM может динамическинаследовать от других POM.

Проблема в том, что версия maven-surefire-plugin, представленная в моем проекте, довольно старая, версия 2.12.4.Я пытаюсь запустить JUnit 5 , для которого требуется 2.22.0 или более поздняя версия.Текущая версия - 3.0.0-M3.

Глядя на левый конец этой розовой стрелки, вы можете видеть, что я добавил элемент dependency в свой POM.

    <dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>3.0.0-M3</version>
    </dependency>

На этом наконечнике левой стрелки я запрашиваю 3.0.0-M3 как попытку переопределить загадочно импортированную / унаследованную указанную версию 2.12.4, видимую на наконечнике правой стрелки.Но моя попытка не удалась, так как старая версия осталась на месте после выполнения Maven clean, install.Я даже попытался перезапустить IntelliJ.Но не надо, мои тесты JUnit 5 по-прежнему игнорируются при запуске Maven test.

➥ Есть ли какой-нибудь способ переопределить версию зависимости, явно унаследованной от какого-то таинственного источника?

Вот мое POM, перед тем как попытаться неудачной попытки добавить зависимость <artifactId>maven-surefire-plugin</artifactId>.

<?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>com.basilbourque.acmeapp</groupId>
    <artifactId>acmeapp</artifactId>
    <name>AcmeApp</name>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <failOnMissingWebXml>false</failOnMissingWebXml>

        <!--<vaadin.version>11.0.1</vaadin.version>-->
        <!--<vaadin.version>12.0.0.beta1</vaadin.version>-->
        <vaadin.version>13.0.0.alpha3</vaadin.version>
    </properties>

    <repositories>
        <!-- Repository used by many Vaadin add-ons -->
        <repository>
            <id>Vaadin Directory</id>
            <url>http://maven.vaadin.com/vaadin-addons</url>
        </repository>

        <repository>
            <id>vaadin-prereleases</id>
            <url>https://maven.vaadin.com/vaadin-prereleases</url>
        </repository>

    </repositories>

    <pluginRepositories>
        <!-- Repository needed for prerelease versions of Vaadin -->
        <pluginRepository>
            <id>vaadin-prereleases</id>
            <url>https://maven.vaadin.com/vaadin-prereleases</url>
        </pluginRepository>
    </pluginRepositories>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.vaadin</groupId>
                <artifactId>vaadin-bom</artifactId>
                <type>pom</type>
                <scope>import</scope>
                <version>${vaadin.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-core</artifactId>
        </dependency>

        <!-- Added to provide logging output as Flow uses -->
        <!-- the unbound SLF4J no-operation (NOP) logger implementation -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <!--<version>3.1.0</version>-->
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>

        <!--JUnit 5-->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.4.0-RC1</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- Jetty plugin for easy testing without a server -->
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.4.14.v20181114</version>
                <configuration>
                    <scanIntervalSeconds>1</scanIntervalSeconds>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <!-- Production mode can be activated with either property or profile -->
            <id>production-mode</id>
            <activation>
                <property>
                    <name>vaadin.productionMode</name>
                </property>
            </activation>
            <properties>
                <vaadin.productionMode>true</vaadin.productionMode>
            </properties>

            <dependencies>
                <dependency>
                    <groupId>com.vaadin</groupId>
                    <artifactId>flow-server-production-mode</artifactId>
                </dependency>
            </dependencies>

            <build>
                <plugins>
                    <plugin>
                        <groupId>com.vaadin</groupId>
                        <artifactId>vaadin-maven-plugin</artifactId>
                        <version>${vaadin.version}</version>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>copy-production-files</goal>
                                    <goal>package-for-production</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

1 Ответ

0 голосов
/ 29 января 2019

Укажите <plugin>, а не <dependency>

Хотя я не Maven Maven, похоже, что решение заключается в определении <artifactId>maven-surefire-plugin</artifactId> в элементе plugin, а не в элементе dependency.

Удалите добавленные <dependency>.

Найдите раздел <plugins> (множественное число) вашего POM, содержащий один элемент <plugin для Jetty.Добавьте этот второй plugin элемент:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M3</version>
            </plugin>

Затем выполните Maven clean и install.Вы должны увидеть, как новая версия появится на панели Maven в IntelliJ.

enter image description here

Теперь вы можете выполнить Maven test, чтобы увидеть, как выполняются ваши тесты 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>
...