2

Cobertura (gradle ビルドで定義) を使用しています。アプリケーションをデプロイして Swing クライアント内をクリックすると、cobertura から NoClassDefFoundError が表示されます。

java.lang.NoClassDefFoundError: net/sourceforge/cobertura/coveragedata/HasBeenInstrumented
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at com.sun.jnlp.JNLPClassLoader.findClass(JNLPClassLoader.java:345)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)

これがどこから来ているのか、私にはわかりません。私のJavaコードにはcoberturaからのものは何もありません。cobertura が定義されている唯一の場所は、依存関係として gradle ビルド ファイル内にあります。

testCompile "net.sourceforge.cobertura:cobertura:1.9.4.1"

2 つの主要なプロジェクトについて grep を実行しました。

find -type f -name "*gradle*" -exec grep -Hn cobertura {} \;

結果は次のとおりです。

./BigTableDataProvider/ext-test/build.gradle:7:def cobSerFile = "$buildDir/cobertura.ser"
./BigTableDataProvider/ext-test/build.gradle:24:    testCompile 'net.sourceforge.cobertura:cobertura:1.9.4.1'
./BigTableDataProvider/ext-test/build.gradle:34:    codeCoverageRun 'net.sourceforge.cobertura:cobertura:1.9.4.1'
./BigTableDataProvider/ext-test/build.gradle:42:    jvmArgs = sampleJvmArg.split(" ").toList() << "-Dnet.sourceforge.cobertura.datafile=$cobSerFile"
./BigTableDataProvider/ext-test/build.gradle:50:        'cobertura-instrument'(datafile: cobSerFile) {
./BigTableDataProvider/ext-test/build.gradle:63:    ant.'cobertura-report'(destdir: "${project.buildDirName}/reports/codeCoverage",

./BigTableExplorer/sample/server/build.gradle:10:    testCompile 'net.sourceforge.cobertura:cobertura:1.9.4.1' // Add this if sample module has inherited classes from server.
./BigTableExplorer/ext-server/build.gradle:20:    testCompile "net.sourceforge.cobertura:cobertura:1.9.4.1"
./BigTableExplorer/ext-test/build.gradle:7:def cobSerFile = "cobertura.ser"
./BigTableExplorer/ext-test/build.gradle:22:    testCompile 'net.sourceforge.cobertura:cobertura:1.9.4.1'
./BigTableExplorer/ext-test/build.gradle:34:    codeCoverageRun 'net.sourceforge.cobertura:cobertura:1.9.4.1'
./BigTableExplorer/ext-test/build.gradle:42:    jvmArgs = sampleJvmArg.split(" ").toList() << "-Dnet.sourceforge.cobertura.datafile=$cobSerFile"
./BigTableExplorer/ext-test/build.gradle:50:        'cobertura-instrument'(datafile: cobSerFile) {
./BigTableExplorer/ext-test/build.gradle:63:    ant.'cobertura-report'(destdir: "${project.buildDirName}/reports/codeCoverage",
4

1 に答える 1

1

Cobertura でインストルメント化されたコードを誤ってデプロイしています。Gradle ビルドは、サードパーティの Cobertura プラグインまたは Cobertura Ant タスクを使用している必要があり、明らかに正しく構成されていません。

于 2012-12-24T12:10:50.767 に答える