Próbuję przenieść kod z przykładów Dropwizard z java na groovy.Nie można używać zmiennych zdefiniowanych w klasach wewnątrz groovenych adnotacji.
widzę, że w języku Java, można użyć poniższy kod, bez żadnych problemów:
package com.example.helloworld;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
@Produces(MediaType.APPLICATION_JSON)
public class HelloWorldService{
}
Jednak z groovy kompilatora (oba 1.8 i 2.0.6), klasa nie skompilować z noClassFoundException wokół MediaType.APPLICATION_JSON
Jeśli zmienić ten kod do korzystania z rzeczywistą wartość ciągu
@Produces('application/json')
public class HelloWorldService{
}
wszystko działa idealnie.
Czy są jakieś różnice między sposobem, w jaki groove rozwiązuje adnotacje, a sposobem, w jaki robi to java?
Dla kompletności, jest częścią projektu Gradle i tu jest moje build.gradle (plik idzie pod src/Groovy/com/example/helloworld)
apply plugin: 'groovy'
// Set our project variables
project.ext {
dropwizardVersion = '0.6.1'
}
repositories {
mavenCentral()
}
dependencies {
compile group: 'com.yammer.dropwizard', name: 'dropwizard-core', version: dropwizardVersion
groovy group: 'org.codehaus.groovy', name: 'groovy-all', version: '1.8.7'
}
Błąd kompilacji:
Spowodowany przez: java.lang.RuntimeException: java.lang.ClassNotFoundException: com.sun.ws.rs.ext.RuntimeDelegateImpl ... 17 więcej Spowodowany przez: java.lang.ClassNotFoundException: com. sun.ws.rs.ext.RuntimeDe legateImpl w org.gradle.api.internal.tasks.compile.TransformingClassLoader.findClass (TransformingClassLoader.java:47)
Czy działa z '@Produces (javax.ws.rs.core.MediaType.APPLICATION_JSON)' –
Nie, to nie - ale błąd sprawia, że myślę, że może to być coś bardziej stopniowego niż groovy rzecz –
wydaje się być gradle błąd, ponieważ jestem w stanie skompilować samething przy użyciu groovy-eclipse i maven. –