2017-01-26 64 views
1

현재 ANT를 사용하여 CruiseControl에서 응용 프로그램을 컴파일하려하지만 UnsupportedClassVersionError를 얻으려고합니다. 빌드 도구 특정 JDK를 사용하도록 JAXWS-RI WSGEN을 구성했습니다.

  • JDK 6에서 실행중인 CruiseControl을 2.4.1 :

    • 환경 : Windows 서버 2012
    • IDE : 이클립스 루나 실행 JDK 8
    • 빌드 서버 ANT
    • 을 다음과 같이 설정이다
    • 컴파일러 : JDK 8 업데이트 (102)
    • 잭스 - WS-RI : 2.2.10

    CruiseControl에 내가있다 서비스로 설치되고 시작하는 동안 JAVA_HOME은 wrapper.conf이라는 파일에서 JDK 6으로 설정됩니다. 타겟 버전이 Java 8이기 때문에 다른 env 변수도 설정됩니다. 개미 빌드 스크립트에서

    set.JAVA_HOME=C:/jdk1.6 
    set.JAVA_HOME_JDK8=C:/jdk1.8.0_102 
    

    은 javac의 작업은 참으로 포크 세트가이 같은 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}"> 
    

    위의 설정이 잘 작동하지만 내가 사용하려고하면 실패 JAXWS-RI는 유물을 생성합니다. 보고 된 특정 오류 :

    java.lang.UnsupportedClassVersionError: com/company/area/thing/services/Service1 : Unsupported major.minor version 52.0 
        at org.apache.tools.ant.ProjectHelper.addLocationToBuildException(ProjectHelper.java:539) 
        at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:384) 
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275) 
        at org.apache.tools.ant.Task.perform(Task.java:364) 
        at org.apache.tools.ant.Target.execute(Target.java:341) 
        at org.apache.tools.ant.Target.performTasks(Target.java:369) 
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216) 
        at org.apache.tools.ant.Project.executeTarget(Project.java:1185) 
        at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40) 
        at org.apache.tools.ant.Project.executeTargets(Project.java:1068) 
        at org.apache.tools.ant.Main.runBuild(Main.java:668) 
        at org.apache.tools.ant.Main.startAnt(Main.java:187) 
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:246) 
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:67) 
    Caused by: C:\path\build.xml:133: The following error occurred while executing this line: 
    java.lang.UnsupportedClassVersionError: com/company/area/thing/services/Service1 : Unsupported major.minor version 52.0 
        at org.apache.tools.ant.ProjectHelper.addLocationToBuildException(ProjectHelper.java:539) 
        at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:384) 
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275) 
        at org.apache.tools.ant.Task.perform(Task.java:364) 
        at org.apache.tools.ant.Target.execute(Target.java:341) 
        at org.apache.tools.ant.Target.performTasks(Target.java:369) 
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216) 
        at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:37) 
        at org.apache.tools.ant.Project.executeTargets(Project.java:1068) 
        at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:382) 
        ... 12 more 
    Caused by: java.lang.UnsupportedClassVersionError: com/company/area/thing/services/Service1 : Unsupported major.minor version 52.0 
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1225) 
        at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:37) 
        at org.apache.tools.ant.Project.executeTargets(Project.java:1068) 
        at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:382) 
        ... 20 more 
    Caused by: java.lang.UnsupportedClassVersionError: com/company/area/thing/services/Service1 : Unsupported major.minor version 52.0 
        at java.lang.ClassLoader.defineClass1(Native Method) 
        at java.lang.ClassLoader.defineClass(ClassLoader.java:620) 
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) 
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) 
        at java.net.URLClassLoader.access$000(URLClassLoader.java:56) 
        at java.net.URLClassLoader$1.run(URLClassLoader.java:195) 
        at java.security.AccessController.doPrivileged(Native Method) 
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251) 
        at com.sun.tools.ws.wscompile.WsgenOptions.getClass(WsgenOptions.java:305) 
        at com.sun.tools.ws.wscompile.WsgenOptions.validateEndpointClass(WsgenOptions.java:244) 
        at com.sun.tools.ws.wscompile.WsgenOptions.validate(WsgenOptions.java:235) 
        at com.sun.tools.ws.wscompile.WsgenTool.run(WsgenTool.java:131) 
        at com.sun.tools.ws.ant.WsGen2.runInVm(WsGen2.java:357) 
        at com.sun.tools.ws.ant.WsTask2.execute(WsTask2.java:423) 
        at com.sun.tools.ws.ant.WsGen2.execute(WsGen2.java:351) 
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275) 
        at org.apache.tools.ant.Task.perform(Task.java:364) 
        at org.apache.tools.ant.Target.execute(Target.java:341) 
        at org.apache.tools.ant.Target.performTasks(Target.java:369) 
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216) 
        ... 23 more 
    

    지금까지 wsgen의 이후 물건을 생성하는 데 사용되는 자바 실행 파일을 찾기 위해 (JDK 6을 가리키는) JAVA_HOME을 사용하기 때문에 내가가 발생 볼 수 있습니다.

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

    내가 컴파일하는 동안 JDK 8 대신 JDK 6을 사용하는 wsgen의를 구성 할, 그러나 나는 지금까지 그렇게 할 수 없었다 :

    WSSGEN 설정입니다. 아무도 내가이 문제를 어떻게 풀 수 있는지 알고 있니? JDK8에서 CruiseControl을 업그레이드하는 것이 현재로서는 옵션이 아니라는 것을 언급해야합니다.

  • +0

    '반전 방지'실행 결과는 무엇입니까? –

    +0

    출력은 다음과 같습니다. Apache Ant 버전 1.6.5 2005 년 6 월 2 일 컴파일 –

    답변

    0

    오류가

    Caused by: java.lang.UnsupportedClassVersionError: com/company/area/thing/services/Service1 : Unsupported major.minor version 52.0

    /*snip*/

    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)

    at com.sun.tools.ws.wscompile.WsgenOptions.getClass(WsgenOptions.java:305)

    오류가 개미를 실행하는 자바 런타임합니다 (JRE)의 버전이 JRE 버전 52.0보다 오래된 것을 말하고 ... 다음 있습니다. JRE 52.0은 Java SE 8의 주요 번호입니다 (How to fix java.lang.UnsupportedClassVersionError: Unsupported major.minor version 참조).

    Ant를 실행중인 JRE가 Java 클래스 com/company/area/thing/services/Service1과 상호 작용하려고합니다. 그러나 Service1 클래스는 Java 8로 컴파일되었습니다. Ant를 실행하는 이전 JRE는 Java 8 클래스를 처리하는 방법을 모르기 때문에 빌드가 실패합니다.

    사용되는 자바의 버전을 확인하기 위해 JDK 8

    를 사용하여 다음 build.xml 스크립트의 설치를 가리 키도록 자바 8. JAVA_HOME으로 Ant를 실행 해보십시오 :

    <project name="ant-jdk-version"> 
        <echo>Java Version via Ant: ${ant.java.version}</echo> 
        <echo>Java Version System Prop: ${java.version}</echo> 
    </project> 
    

    스크립트를한다 비슷한 것을 출력하십시오 ...

    [echo] Java Version via Ant: 1.8 
    [echo] Java Version System Prop: 1.8.0_60 
    
    +0

    힌트를 보내 주셔서 감사합니다. JAVA_HOME_ANT라는 새로운 환경 특성을 작성하고 JAVA_HOME 대신이 변수를 사용하도록 ant.bat 스크립트를 수정하는 일시적인 해결책 (즉, 매우 불쾌한 해결 방법)으로 연결됩니다. –