Java JAXWS-RI WSGEN配置为使用特定JDK
我目前正试图使用ANT在CruiseControl中编译一个应用程序,但得到了一个不受支持的ClassVersionError。设置如下所示:Java JAXWS-RI WSGEN配置为使用特定JDK,java,ant,java-8,jax-ws,cruisecontrol,Java,Ant,Java 8,Jax Ws,Cruisecontrol,我目前正试图使用ANT在CruiseControl中编译一个应用程序,但得到了一个不受支持的ClassVersionError。设置如下所示: 环境:Windows server 2012 IDE:EclipseLuna运行JDK8 构建服务器:运行在JDK 6上的CruiseControl 2.4.1 构建工具:ANT 编译器:JDK 8更新102 JAXWS-RI:2.2.10 CruiseControl作为服务安装,在启动过程中,JAVA_HOME在一个名为wrapper.conf的文
- 环境:Windows server 2012
- IDE:EclipseLuna运行JDK8
- 构建服务器:运行在JDK 6上的CruiseControl 2.4.1
- 构建工具:ANT
- 编译器:JDK 8更新102
- JAXWS-RI:2.2.10
set.JAVA_HOME=C:/jdk1.6
set.JAVA_HOME_JDK8=C:/jdk1.8.0_102
在ANT构建脚本中,javac任务将fork设置为true,并指定java可执行文件的路径,如下所示:
<property name="javac.fork" value="yes"/>
<property environment="env"/>
<property name="javac.location" value="${env.JAVA_HOME_JDK8}\\bin\\javac.exe"/>
<javac includeantruntime="false" destdir="${builddir}" debug="true"
target="1.8" source="1.8" debuglevel="lines,vars,source"
fork="${javac.fork}" executable="${javac.location}">
据我所知,它被抛出是因为WSGEN使用JAVA_HOME(指向JDK 6)来查找随后用于生成内容的JAVA可执行文件
WSSGEN设置为:
<target name="wsgen-compile">
<mkdir dir="${builddir}"/>
<javac includeantruntime="false" destdir="${builddir}" debug="true" target="1.8" source="1.8" debuglevel="lines,vars,source" fork="${javac.fork}" executable="${javac.location}">
<src path="${src.tmp}" />
<classpath>
<pathelement path="${classpath}"/>
<pathelement path="${builddir}/../../common/bin"/>
<pathelement path="${builddir}/../../server/bin"/>
<fileset dir="${libdir}">
<include name="*.jar"/>
</fileset>
</classpath>
</javac>
</target>
<target name="wsgen-generate">
<taskdef name="wsgen" classname="com.sun.tools.ws.ant.WsGen2">
<classpath>
<fileset dir="${webserviceslibdir}/jax/jaxws-ri/lib">
<include name="*.jar"/>
</fileset>
</classpath>
</taskdef>
<wsgen verbose="true"
genwsdl="true"
xendorsed="false"
keep="true"
resourcedestdir="properties"
destdir="${src.tmp}"
sei="com.nordea.nordiccms.server.webservices.${service}">
<classpath>
<pathelement path="${classpath}"/>
<pathelement path="${builddir}/../../common/bin"/>
<pathelement path="${builddir}/../../server/bin"/>
<fileset dir="${libdir}">
<include name="*.jar"/>
</fileset>
</classpath>
<arg value="J.java_home"/>
</wsgen>
<delete>
<fileset dir="${src.tmp}">
<include name="**/*.class"/>
</fileset>
</delete>
</target>
<target name="wsgen" depends="compile">
<echo message=""/>
<echo message="Building ${distributionnameserver} WebService files"/>
<echo message="----------"/>
<mkdir dir="${builddir}/wsgen"/>
<delete dir="${src.tmp}"/>
<mkdir dir="${src.tmp}"/>
<ant target="wsgen-generate">
<property name="service" value="Service1"/>
</ant>
<ant target="wsgen-compile"/>
<delete dir="${src.tmp}"/>
</target>
我想在编译时将WSGEN配置为使用JDK 8而不是JDK 6,但到目前为止我还无法做到这一点。有人知道我如何解决这个问题吗?我应该提到的是,在这一点上,升级CruiseControl以在JDK8上运行不是一个选项。错误有以下几点 原因:java.lang.UnsupportedClassVersionError:com/company/area/thing/services/Service1:不受支持的主要版本。次要版本52.0 /*剪断*/ 位于java.lang.ClassLoader.loadClass(ClassLoader.java:251) 位于com.sun.tools.ws.wscompile.WsgenOptions.getClass(WsgenOptions.java:305) 错误是运行Ant的Java运行时(JRE)版本比JRE版本52.0旧。JRE 52.0是JavaSE8的主要版本(请参阅) 运行Ant的JRE正在尝试与Java类
com/company/area/thing/services/Service1
交互。然而,Service1
类是用Java8编译的。运行Ant的旧JRE不知道如何处理Java8类,因此构建失败
尝试用Java8运行Ant。将JAVA_HOME
设置为指向JDK 8的安装
使用以下build.xml
脚本验证正在使用的Java版本:
<project name="ant-jdk-version">
<echo>Java Version via Ant: ${ant.java.version}</echo>
<echo>Java Version System Prop: ${java.version}</echo>
</project>
该错误具有以下内容 原因:java.lang.UnsupportedClassVersionError:com/company/area/thing/services/Service1:不受支持的主要版本。次要版本52.0 /*剪断*/ 位于java.lang.ClassLoader.loadClass(ClassLoader.java:251) 位于com.sun.tools.ws.wscompile.WsgenOptions.getClass(WsgenOptions.java:305) 错误是运行Ant的Java运行时(JRE)版本比JRE版本52.0旧。JRE 52.0是JavaSE8的主要版本(请参阅) 运行Ant的JRE正在尝试与Java类
com/company/area/thing/services/Service1
交互。然而,Service1
类是用Java8编译的。运行Ant的旧JRE不知道如何处理Java8类,因此构建失败
尝试用Java8运行Ant。将JAVA_HOME
设置为指向JDK 8的安装
使用以下build.xml
脚本验证正在使用的Java版本:
<project name="ant-jdk-version">
<echo>Java Version via Ant: ${ant.java.version}</echo>
<echo>Java Version System Prop: ${java.version}</echo>
</project>
运行
ant-version
的输出是什么?输出如下:2005年6月2日编译的ApacheAnt版本1.6.5运行ant-version
的输出是什么?输出如下:2005年6月2日编译的ApacheAnt版本1.6.5感谢您的提示。这让我找到了一个临时解决方案(即一个非常糟糕的解决方法),其中包括创建一个名为JAVA_HOME_ANT的新环境属性,并修改ANT.bat脚本以使用此变量而不是JAVA_HOME。感谢您的提示。它引导我找到了一个临时解决方案(即一个非常糟糕的解决方法),其中包括创建一个名为JAVA_HOME_ANT的新环境属性,并修改ANT.bat脚本以使用此变量而不是JAVA_HOME。