6

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编译时不是常量怎么办?

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

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

更新: 找到原因,但还是不明白。

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

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

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

4

1 回答 1

0

我最好的猜测是,这是因为swagger-maven-plugin传递(通过io.swagger:swagger-core:1.5.13)旧版本的 JAX-RS 规范在javax.ws.rs:jsr311-api:1.1.1. 请注意,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

于 2017-10-04T22:50:48.663 回答