NoSuchMethodError: org.springframework.plugin.core.PluginRegistry.getPluginOrDefaultFor - PullRequest
2 голосов
/ 12 января 2020

Все было хорошо, даже с Swagger, однако внезапно после того, как новый проект сборки не сгенерирует бросок

Caused by: org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NoSuchMethodError: org.springframework.plugin.core.PluginRegistry.getPluginOrDefaultFor(Ljava/lang/Object;Lorg/springframework/plugin/core/Plugin;)Lorg/springframework/plugin/core/Plugin;

Я попробовал решение по этой ссылке: https://github.com/springfox/springfox/issues/2932 однако ошибка компиляции все еще сохраняются.

Я прилагаю pom. xml file:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.geborskimateusz.microservices.composite.movie</groupId>
    <artifactId>movie-composite-service</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <name>movie-composite-service</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <swagger.version>3.0.0-SNAPSHOT</swagger.version>
    </properties>


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.geborskimateusz</groupId>
            <artifactId>api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.geborskimateusz</groupId>
            <artifactId>util</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.1.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${swagger.version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-spring-webflux</artifactId>
            <version>${swagger.version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${swagger.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-kafka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-test-support</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <repositories>
        <repository>
            <id>jcenter-snapshots</id>
            <name>jcenter</name>
            <url>http://oss.jfrog.org/artifactory/oss-snapshot-local/</url>
        </repository>
    </repositories>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Есть идеи, связано ли это с чванливой версией?

1 Ответ

3 голосов
/ 13 января 2020

Эта ошибка возникает, когда часть кода была скомпилирована с заданной сигнатурой метода, но во время выполнения обнаруживается другая.

Это обычно происходит, когда существует разница между версией зависимости, используемой при компиляции. время и зависимость, которая фактически предоставляется программе во время выполнения.

У нас только что была эта ошибка с коллегой, и мы исправили ее, просто изменив версию весенней загрузки на 2.2.2.

Не уверен, что именно произошло, но, учитывая версию SNAPSHOT, можно предположить, что последняя рабочая версия springfox (работающая для вас и нас) была скомпилирована с загрузочной версией Spring, уступающей 2.2.2. Эта загрузочная версия имела другую сигнатуру метода для getPluginOrDefaultFor (или, возможно, метод вообще не существовал).

Ваша программа не видит разницы, потому что API swagger lib не изменился, поэтому, похоже, ничего изменилось и вдруг произошла ошибка. Но основополагающая реализация фактической библиотеки swagger основана на некотором методе из Spring Boot 2.2.2, который он не находит в вашей настройке, так как версия Boot - 2.1.0, и это создает конфликт между тем, что он ожидает найти, и тем, что он на самом деле делает.

В любом случае, просто обновить Boot до 2.2.2 следует исправить; возможно, понизив spring-fox до 2.9.2, если вам не нужен модуль webflux - но, похоже, вам это нужно (у вас не было возможности попробовать, потому что в нашем случае нам нужна зависимость от webfoxs Springfox)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...