私はこの問題に悩まされており、それを小さなファイルに絞り込むことができました。このファイルは、タスクで に設定してAnt から呼び出されたときに をスローできませんが、 が に設定されていると成功します。java.lang.VerifyError
fork
false
<java>
fork
true
自己完結型のファイルは次のとおりです。
package foo;
import javax.xml.ws.Endpoint;
import javax.jws.WebService;
@WebService
class Hello {
public String sayHello() {
return "hello";
}
}
public class FooMain {
public static void main(String args[]) throws Exception {
Object implementor = new Hello();
String address = "http://localhost:9000/SoapContext/SoapPort";
Endpoint.publish(address, implementor);
}
}
Ant で呼び出して Ant にfork
設定するfalse
と、以下がスローされます。
[java] java.lang.VerifyError: Bad type on operand stack
[java] Exception Details:
[java] Location:
[java] com/sun/net/httpserver/spi/HttpServerProvider$1.run()Ljava/lang/Object; @27: invokestatic
[java] Reason:
[java] Type 'sun/net/httpserver/DefaultHttpServerProvider' (current frame, stack[0]) is not assignable to 'com/sun/net/httpserver/spi/HttpServerProvider'
[java] Current Frame:
[java] bci: @27
[java] flags: { }
[java] locals: { 'com/sun/net/httpserver/spi/HttpServerProvider$1' }
[java] stack: { 'sun/net/httpserver/DefaultHttpServerProvider' }
[java] Bytecode:
[java] 0000000: b800 2599 0007 b800 27b0 b800 2699 0007
[java] 0000010: b800 27b0 bb00 1a59 b700 2ab8 0028 57b8
[java] 0000020: 0027 b0
[java] Stackmap Table:
[java] same_frame(@10)
fork
に設定して呼び出すとtrue
、成功します。VerifyError
特に " " と組み合わせた場合の特定の例外Bad type on operand stack
は、私が読んだものからコンパイラのバグを示していますが、 Ant タスクのfork
属性に応じて成功または失敗する理由はわかりません。<java>
何かご意見は?Ubuntu 12.04
次のJavaツールで実行しています:
$ java -version
java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) Server VM (build 24.0-b56, mixed mode)
$ javac -version
javac 1.7.0_40
$ ant -version
Apache Ant(TM) version 1.8.2 compiled on December 3 2011
$ ant -diagnostics | grep java.vm
java.vm.version : 24.0-b56
java.vm.vendor : Oracle Corporation
java.vm.name : Java HotSpot(TM) Server VM
java.vm.specification.name : Java Virtual Machine Specification
java.vm.specification.vendor : Oracle Corporation
java.vm.specification.version : 1.7
java.vm.info : mixed mode
重要な更新
fork
に設定してAnt から呼び出された場合、例外をトリガーするために、false
明示的に/usr/lib/jvm/jdk1.7.0/jre/lib/rt.jar
CLASSPATH に追加する必要もあります。VerifyError
そうしないと、そのポイントに到達する前に次のように失敗します。
javax.xml.ws.WebServiceException: Provider com.sun.xml.internal.ws.spi.ProviderImpl not found
もちろんrt.jar
、CLASSPATH に追加する必要があるのは、特に私が使用しているバージョンrt.jar
であるため、非常に奇妙です。java