Dropwizardの例のコードをjavaからgroovyに移植しようとしています。
Java内では、次のコードを問題なく使用できることがわかります。
package com.example.helloworld;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
@Produces(MediaType.APPLICATION_JSON)
public class HelloWorldService{
}
ただし、Groovyコンパイラ(1.8と2.0.6の両方)では、MediaType.APPLICATION_JSONの周りにnoClassFoundExceptionがあり、クラスのコンパイルに失敗します。
このコードを変更して実際の文字列値を使用すると
@Produces('application/json')
public class HelloWorldService{
}
すべてが完璧に機能します。
groovyがアノテーションを解決する方法とjavaが解決する方法に違いはありますか?
完全を期すために、これはgradleプロジェクトの一部であり、これが私のbuild.gradleです(ファイルは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'
}
コンパイルエラーは次のとおりです。
原因:java.lang.RuntimeException:java.lang.ClassNotFoundException:com.sun.ws.rs.ext.RuntimeDelegateImpl ... 17 more原因:java.lang.ClassNotFoundException:com.sun.ws.rs.ext。 org.gradle.api.internal.tasks.compile.TransformingClassLoader.findClass(TransformingClassLoader.java:47)のRuntimeDelegateImpl