有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

swaggermavenplugin触发Javadoc警告:元素值必须是常量表达式(但它是!)在Java注释中

Javadoc(通过Maven)在我的一个Java JAX-RS接口方法签名中给了我以下错误:

error: element value must be a constant expression

这是我的JAX-RS接口:

public interface FooResource {

  @Consumes(APPLICATION_FORM_URLENCODED_UTF_8)
  public void bar();

}

Javdoc给出了@Consumes的错误。以下是APPLICATION_FORM_URLENCODED_UTF_8的定义,它出现在同一项目的MyAppConstants中:

public static final String APPLICATION_FORM_URLENCODED_UTF_8 =
    APPLICATION_FORM_URLENCODED + ";" + CHARSET_PARAMETER + "=UTF-8";

这里是APPLICATION_FORM_URLENCODED的定义,它出现在javax.ws.rs.core.MediaType中:

public final static String APPLICATION_FORM_URLENCODED = "application/x-www-form-urlencoded";

这里是CHARSET_PARAMETER的定义,也出现在javax.ws.rs.core.MediaType中:

public static final String CHARSET_PARAMETER = "charset";

现在我问你:APPLICATION_FORM_URLENCODED_UTF_8在编译时不是常量,那怎么办

错误消息没有说我必须提供文本。它说我必须提供一个常数。那么这不是一个常数呢

(我几乎可以发誓这曾经奏效,但突然停止了。)

更新:找到了原因,但仍然不明白

出于某种原因,仅仅在POM中包含swagger-maven-plugin将触发此问题!我的代码一点也没有改变,但只要我添加了以下依赖项,我就会突然收到我现有代码的Javadoc警告

<dependency>
  <groupId>com.github.kongchen</groupId>
  <artifactId>swagger-maven-plugin</artifactId>
  <version>3.1.5</version>
</dependency>

单个依赖项如何使Javadoc在代码文件上以不同的方式工作?swagger-maven-plugin在做什么


共 (1) 个答案

  1. # 1 楼答案

    我最好的猜测是,发生这种情况是因为swagger-maven-plugin通过io.swagger:swagger-core:1.5.13传递javax.ws.rs:jsr311-api:1.1.1中的旧版本JAX-RS规范。请注意,JAX-RS 2工件ID是javax.ws.rs-api,Maven没有意识到它们是同一个JAR的不同版本,并将它们作为依赖项拉入。我只能猜测javax.ws.rs:jsr311-api实际上不使用常量来表示所讨论的变量。无论如何,当我扔掉swagger-maven-plugin并拉进去io.swagger:swagger-annotations(这是我在这个项目中所需要的全部文档)时,问题就消失了

    https://github.com/kongchen/swagger-maven-plugin/issues/543