6

Javadoc (via Maven) gibt mir den folgenden Fehler in einem meiner Java JAX-RS Interface Methodensignaturen:swagger-maven-plugin löst Javadoc-Warnung aus: element value muss ein konstanter Ausdruck sein (aber es ist!) In Java-Annotation

error: element value must be a constant expression 

Hier ist meine JAX-RS-Schnittstelle:

public interface FooResource { 

    @Consumes(APPLICATION_FORM_URLENCODED_UTF_8) 
    public void bar(); 

} 

Javdoc gibt den Fehler für @Consumes. Hier ist die Definition für APPLICATION_FORM_URLENCODED_UTF_8, die in MyAppConstants im selben Projekt erscheint:

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

Und hier ist die Definition von APPLICATION_FORM_URLENCODED, die in javax.ws.rs.core.MediaType erscheint:

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

Und hier ist die Definition von CHARSET_PARAMETER , das scheint auch in javax.ws.rs.core.MediaType:

public static final String CHARSET_PARAMETER = "charset"; 

Nun frage ich Sie : Was ist mit ist nicht zur Kompilierzeit konstant?

Die Fehlermeldung nicht, dass ich eine Literal bereitstellen muss. Es hieß, dass ich eine Konstante bereitstellen musste. Was ist also mit einer Konstante?

(ich konnte fast schwören, dass dies zu einer Zeit gearbeitet, aber plötzlich aufgehört zu arbeiten.)

Update:gefunden Ursache, aber immer noch nicht verstehen.

Aus irgendeinem Grund wird nur das Einfügen des swagger-maven-plugin in das POM dieses Problem auslösen! Mein Code ändert sich nicht, aber sobald ich die folgende Abhängigkeit hinzufüge, erhalte ich plötzlich Javadoc-Warnungen für meinen bestehenden Code !!!

Wie kann eine einzelne Abhängigkeit dazu führen, dass Javadoc in einer Codedatei anders funktioniert? Was macht swagger-maven-plugin?

+0

Sicher ist das 'final' Schlüsselwort noch da? Ohne sie verliert die Klassenvariable ihre konstante Eigenschaft. – Seelenvirtuose

+0

Hast du schon die gute alte 'clean install' versucht? –

+0

Ja, das 'final' Schlüsselwort ist immer noch da. Ja, ich habe eine "mvn clean install" gemacht. –

Antwort

0

Meine beste Schätzung ist, dass dies passiert, weil swagger-maven-plugin transitiv (über io.swagger:swagger-core:1.5.13) eine alte Version der JAX-RS-Spezifikation in javax.ws.rs:jsr311-api:1.1.1. Beachten Sie, dass die JAX-RS 2-Artefakt-ID javax.ws.rs-api ist. Maven erkennt nicht, dass es sich um verschiedene Versionen derselben JAR handelt, und zieht sie beide als Abhängigkeiten ein. Ich kann nur vermuten, dass javax.ws.rs:jsr311-api tatsächlich keine Konstanten für die betreffenden Variablen verwendet. In jedem Fall, als ich swagger-maven-plugin rausgeworfen und io.swagger:swagger-annotations eingezogen habe (was alles war, was ich in diesem Projekt zur Dokumentation brauchte), ging das Problem weg.

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

Verwandte Themen