Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXWS-RI WSGEN配置为使用特定JDK_Java_Ant_Java 8_Jax Ws_Cruisecontrol - Fatal编程技术网

Java JAXWS-RI WSGEN配置为使用特定JDK

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的文

我目前正试图使用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的文件中设置为JDK 6。由于目标版本是Java8,因此还设置了另一个env变量

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。