OpenAPI 生成器 Maven 插件生成带有缺失符号的类。

huangapple go评论99阅读模式
英文:

Openapi generator maven plugin generate classes with missing symbol

问题

我使用 openapi-generator-maven-plugin 从 openapi yml 文件生成类,但在其中一些文件中遇到了以下错误:

无法找到符号
符号:   方法 requiredMode()
位置: @interface io.swagger.v3.oas.annotations.media.Schema

我检查了 io.swagger.v3.oas.annotations.media.Schema,发现确实缺少了 requiredMode() 方法。

以下是我的 pom 文件:

<?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>3.1.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.maglione</groupId>
    <artifactId>contactsapi</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>contactsapi</name>
    <description>Demo project </description>
    <properties>
        <java.version>17</java.version>
        <openapi-generator.version>6.6.0</openapi-generator.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>
        <!-- 其他依赖项... -->
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.openapitools</groupId>
                <artifactId>openapi-generator-maven-plugin</artifactId>
                <version>${openapi-generator.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>
                                ${project.basedir}/src/main/resources/contactsapi.yml
                            </inputSpec>
                            <!-- 其他配置... -->
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

我尝试在线搜索可能的错误,但未找到任何信息。

英文:

I use openapi-generator-maven-plugin to generate classes from openapi yml files but in some of them I get this errors:


Cannot find symbol
symbol: method requiredMode()
location: @interface io.swagger.v3.oas.annotations.media.Schema

I checked in io.swagger.v3.oas.annotations.media.Schema and method requiredMode() is really missing.

Below my pom file:

   &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
   &lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;  xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd&quot;&gt;
&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
&lt;parent&gt;
	&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
	&lt;artifactId&gt;spring-boot-starter-parent&lt;/artifactId&gt;
	&lt;version&gt;3.1.0&lt;/version&gt;
	&lt;relativePath/&gt; &lt;!-- lookup parent from repository --&gt;
&lt;/parent&gt;
&lt;groupId&gt;com.maglione&lt;/groupId&gt;
&lt;artifactId&gt;contactsapi&lt;/artifactId&gt;
&lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
&lt;name&gt;contactsapi&lt;/name&gt;
&lt;description&gt;Demo project &lt;/description&gt;
&lt;properties&gt;
	&lt;java.version&gt;17&lt;/java.version&gt;
	&lt;openapi-generator.version&gt;6.6.0&lt;/openapi-generator.version&gt;
&lt;/properties&gt;
&lt;dependencies&gt;
	&lt;dependency&gt;
		&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
		&lt;artifactId&gt;spring-boot-starter-data-jdbc&lt;/artifactId&gt;
	&lt;/dependency&gt;
	&lt;dependency&gt;
		&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
		&lt;artifactId&gt;spring-boot-starter-data-jpa&lt;/artifactId&gt;
	&lt;/dependency&gt;
	&lt;dependency&gt;
		&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
		&lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt;
	&lt;/dependency&gt;
	&lt;dependency&gt;
		&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
		&lt;artifactId&gt;spring-boot-starter-validation&lt;/artifactId&gt;
	&lt;/dependency&gt;
	&lt;dependency&gt;
		&lt;groupId&gt;com.h2database&lt;/groupId&gt;
		&lt;artifactId&gt;h2&lt;/artifactId&gt;
		&lt;scope&gt;runtime&lt;/scope&gt;
	&lt;/dependency&gt;
	&lt;dependency&gt;
		&lt;groupId&gt;javax.annotation&lt;/groupId&gt;
		&lt;artifactId&gt;javax.annotation-api&lt;/artifactId&gt;
		&lt;version&gt;1.3.2&lt;/version&gt;
	&lt;/dependency&gt;
	&lt;dependency&gt;
		&lt;groupId&gt;javax.validation&lt;/groupId&gt;
		&lt;artifactId&gt;validation-api&lt;/artifactId&gt;
		&lt;version&gt;1.1.0.Final&lt;/version&gt;
	&lt;/dependency&gt;
	&lt;dependency&gt;
		&lt;groupId&gt;org.openapitools&lt;/groupId&gt;
		&lt;artifactId&gt;jackson-databind-nullable&lt;/artifactId&gt;
		&lt;version&gt;0.2.6&lt;/version&gt;
	&lt;/dependency&gt;
	&lt;dependency&gt;
		&lt;groupId&gt;io.springfox&lt;/groupId&gt;
		&lt;artifactId&gt;springfox-swagger2&lt;/artifactId&gt;
		&lt;version&gt;3.0.0&lt;/version&gt;
	&lt;/dependency&gt;
	&lt;dependency&gt;
		&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
		&lt;artifactId&gt;spring-boot-starter-test&lt;/artifactId&gt;
		&lt;scope&gt;test&lt;/scope&gt;
	&lt;/dependency&gt;
&lt;/dependencies&gt;

&lt;build&gt;
	&lt;plugins&gt;
		&lt;plugin&gt;
			&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
			&lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt;
		&lt;/plugin&gt;
		&lt;plugin&gt;
			&lt;groupId&gt;org.openapitools&lt;/groupId&gt;
			&lt;artifactId&gt;openapi-generator-maven-plugin&lt;/artifactId&gt;
			&lt;version&gt;${openapi-generator.version}&lt;/version&gt;
			&lt;executions&gt;
				&lt;execution&gt;
					&lt;goals&gt;
						&lt;goal&gt;generate&lt;/goal&gt;
					&lt;/goals&gt;
					&lt;configuration&gt;
						&lt;inputSpec&gt;
							 ${project.basedir}/src/main/resources/contactsapi.yml
						&lt;/inputSpec&gt;
						&lt;generatorName&gt;spring&lt;/generatorName&gt;
						&lt;apiPackage&gt;com.maglione.contactsapi.api&lt;/apiPackage&gt;
						&lt;modelPackage&gt;com.maglione.contactsapi.model&lt;/modelPackage&gt;
						&lt;supportingFilesToGenerate&gt;
							ApiUtil.java
						&lt;/supportingFilesToGenerate&gt;
						&lt;configOptions&gt;
							&lt;delegatePattern&gt;true&lt;/delegatePattern&gt;
							&lt;useSpringBoot3&gt;true&lt;/useSpringBoot3&gt;

						&lt;/configOptions&gt;
					&lt;/configuration&gt;
				&lt;/execution&gt;
			&lt;/executions&gt;
		&lt;/plugin&gt;
	&lt;/plugins&gt;
&lt;/build&gt;

</project>

I tried to search online for possible bug but did not find anything

答案1

得分: 2

欢迎来到StackOverflow,jack nik

正如Helen所提到的,requiredMode() 只存在于较新版本的 swagger-annotations 中。
要检查项目使用的版本,运行 mvn dependency:tree 命令。你会发现通过 springfox-swagger2 间接包含的 swagger-annotations 版本为 2.1.2。

如果你从 pom.xml 中删除 supportingFilesToGenerate 部分,openapi-generator 将会创建一个文件 .target/generated-sources/openapi/pom.xml,其中列出了要与生成的代码一起使用的预期依赖项。在你的情况下,这些依赖项包括通过 org.springdoc:springdoc-openapi-starter-webmvc-ui:jar:2.0.2 间接包含的 io.swagger.core.v3:swagger-core-jakarta:jar:2.2.7

要修复你的构建问题,你需要包含较新的 swagger 依赖项。你还需要排除旧的 swagger 依赖项,以便 Maven 知道必须使用新依赖项中的注解,而不能使用旧依赖项中的注解。


因此,要修复你的问题,请将此代码替换为:

    &lt;dependency&gt;
        &lt;groupId&gt;io.springfox&lt;/groupId&gt;
        &lt;artifactId&gt;springfox-swagger2&lt;/artifactId&gt;
        &lt;version&gt;3.0.0&lt;/version&gt;
    &lt;/dependency&gt;

替换为这个代码:

        &lt;dependency&gt;
            &lt;groupId&gt;io.springfox&lt;/groupId&gt;
            &lt;artifactId&gt;springfox-swagger2&lt;/artifactId&gt;
            &lt;version&gt;3.0.0&lt;/version&gt;
            &lt;exclusions&gt;
                &lt;exclusion&gt;
                    &lt;groupId&gt;io.swagger.core.v3&lt;/groupId&gt;
                    &lt;artifactId&gt;swagger-annotations&lt;/artifactId&gt;
                &lt;/exclusion&gt;
            &lt;/exclusions&gt;
        &lt;/dependency&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;io.swagger.core.v3&lt;/groupId&gt;
            &lt;artifactId&gt;swagger-core-jakarta&lt;/artifactId&gt;
            &lt;version&gt;2.2.7&lt;/version&gt;
        &lt;/dependency&gt;
英文:

Welcome to StackOverflow, jack nik!

As Helen mentioned, requiredMode() exists only in newer versions of swagger-annotations.
To check what version your project is using, run mvn dependency:tree. You'll find that swagger-annotations version 2.1.2 is used, as transitively included via springfox-swagger2.

If you remove the supportingFilesToGenerate section from your pom.xml, openapi-generator will create a file .target/generated-sources/openapi/pom.xml that tells you the intended dependencies to be used with the generated code. In your case, these dependencies include io.swagger.core.v3:swagger-core-jakarta:jar:2.2.7, transitively included via org.springdoc:springdoc-openapi-starter-webmvc-ui:jar:2.0.2.

To fix your build, you need to include the newer swagger dependency. And you also need to exclude the old swagger dependency, so that maven knows it has to use the annotations from the new dependency and cannot use the annotations from the old dependency.


So to fix your problem, replace this:

    &lt;dependency&gt;
        &lt;groupId&gt;io.springfox&lt;/groupId&gt;
        &lt;artifactId&gt;springfox-swagger2&lt;/artifactId&gt;
        &lt;version&gt;3.0.0&lt;/version&gt;
    &lt;/dependency&gt;

by this:

        &lt;dependency&gt;
            &lt;groupId&gt;io.springfox&lt;/groupId&gt;
            &lt;artifactId&gt;springfox-swagger2&lt;/artifactId&gt;
            &lt;version&gt;3.0.0&lt;/version&gt;
            &lt;exclusions&gt;
                &lt;exclusion&gt;
                    &lt;groupId&gt;io.swagger.core.v3&lt;/groupId&gt;
                    &lt;artifactId&gt;swagger-annotations&lt;/artifactId&gt;
                &lt;/exclusion&gt;
            &lt;/exclusions&gt;
        &lt;/dependency&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;io.swagger.core.v3&lt;/groupId&gt;
            &lt;artifactId&gt;swagger-core-jakarta&lt;/artifactId&gt;
            &lt;version&gt;2.2.7&lt;/version&gt;
        &lt;/dependency&gt;

huangapple
  • 本文由 发表于 2023年6月2日 02:59:43
  • 转载请务必保留本文链接:https://go.coder-hub.com/76384937.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定