6

在我的Java JAX-RS接口方法签名中,Javadoc(通过Maven)给我提供以下错误:swagger-maven-plugin触发Javadoc警告:元素值必须是Java注释中的常量表达式(但它是!)

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在做什么?

+0

确定'final'关键字仍然存在?没有它,类变量就会失去其不变的特征。 – Seelenvirtuose

+0

你已经尝试过很好的'clean install'吗? –

+0

是的,最终的关键字仍然存在。是的,我做了一个'mvn clean install'。 –

回答

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

相关问题