2017-01-26 80 views
1

現在、CruiseControlでANTを使用してアプリケーションをコンパイルしようとしていますが、UnsupportedClassVersionErrorを取得しています。次のようにセットアップは次のとおりです。特定のJDKを使用するようにJAXWS-RI WSGENを設定します

  • 環境:Windowsサーバー2012
  • IDE:ANT
  • :CruiseControlの2.4.1は、JDK 6
  • ビルド・ツールで実行されている:EclipseのルナはJDK 8
  • ビルドサーバを実行しています
  • コンパイラ:JDK 8のアップデート102
  • JAXWS-RI:2.2.10

CruiseControlのは、Iでありますサービスとしてインストールされ、起動時にJAVA_HOMEはwrapper.confというファイルでJDK 6に設定されます。ターゲットバージョンがJava 8であるため、別のenv変数も設定されます。 ANTビルドスクリプトで

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

のjavacタスクが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}"> 

私が使用しようとすると、上記の設定がうまく動作しますが、失敗しました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がその後のものを生成するために使用されるJava実行可能ファイルを見つけるために、(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

実行中の「ant -version」の出力は? –

+0

出力は次のとおりです。2005年6月2日にコンパイルされたApache Antバージョン1.6.5 –

答えて

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)

エラーAntを実行しているJavaランタイム(JRE)のバージョンがJREバージョン52.0より古いことを言っている...次のことを持っています。 JRE 52.0はJava SE 8のメジャー番号です(How to fix java.lang.UnsupportedClassVersionError: Unsupported major.minor version参照)。

JREを実行しているAntは、Javaクラスcom/company/area/thing/services/Service1と対話しようとしています。しかし、Service1クラスはJava 8でコンパイルされました。Antを実行する古いJREはJava 8クラスの処理方法を知らないため、ビルドに失敗します。

使用されているJavaのバージョンを確認するにはJDK 8

使用次build.xmlスクリプトのインストールを指すようにするJava 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スクリプトを変更するという一時的な解決策になります。 –

関連する問題