2011-08-10 1 views
3

私はクラスを生成し、JDKのtools.jarでコンパイルするant build.xmlを使用しています。maven-antrun-plugin 1.6 Java 1.4.2バージョンでクラスをコンパイルしたい

私はMAVEN 2.2.1バージョンを使用しています。 MAVENを実行するJDK 1.5。 Maven 2.2.1のバージョンはJDK 1.5以上しかサポートしていないので、私はそれを使用しなければなりません。

このmaven-antrun-pluginでは、コンパイラのソースバージョンもターゲットバージョンも指定できません。 したがって、生成されたクラスは、現在実行中のJVM(JDK)に対して、rt.jarとプラグイン依存関係で提供されているtools.jarを使用してコンパイルされます(またはjvmのlib/extディレクトリに格納されます)。

Mavenを1.5で実行すると、JDK 1.4.2バージョンでこれらのクラスをコンパイルするためにJVM(jdk1.5.0_22)が必要です。なぜなら、それらをデプロイするサーバーが1.4 JVMで実行されているからです私は、私の日食やコマンドラインからMAVENプラグインでコンパイルしている間に例外を取得しています。

別のJavaバージョンを使用してクラスをコンパイルするようにantrunに指示する方法が見つかりませんでした。 私は次の回避策を試してみました:1.4バージョンを指すように

  • 変更tools.jarの依存性=>コンパイラは、現在実行中の1.5 JVMからrt.jarのを使用して、クラスファイルのバージョンが一致していません(version 49.0、expecting 48.0)
  • 1.4 rt.jar =に依存関係を追加すると、ブートクラスパスにrt.jarを指定する必要があるため、何も変更されません。

次は、私が使用しているサンプルコードです。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.6</version> 
    <executions> 
     <execution> 
      <id>install</id> 
      <phase>install</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      <configuration> 
       <source>${java-version}</source> 
       <target>${java-version}</target> 
       <compilerVersion>${java-version}</compilerVersion> 
       <compilerArguments> 
        <classpath>${java.home}/lib/tools.jar</classpath> 
        <classpath>${java.home}/jre/lib/rt.jar</classpath> 
       </compilerArguments> 
       <tasks> 
        <ant antfile="WPSEjb_build.xml"/> 
       </tasks> 
      </configuration> 
     </execution> 
    </executions> 
    <dependencies> 
     <dependency> 
      <groupId>crimson</groupId> 
      <artifactId>crimson</artifactId> 
      <version>1.1.3</version> 
     </dependency> 
     <dependency> 
      <groupId>sun.jdk</groupId> 
      <artifactId>tools</artifactId> 
      <version>1.4.2</version> 
      <scope>system</scope> 
      <systemPath>${java.home}/lib/tools.jar</systemPath> 
     </dependency> 
     <dependency> 
      <groupId>com.sun</groupId> 
      <artifactId>rt</artifactId> 
      <version>${java-version}</version> 
      <scope>system</scope> 
      <systemPath>${java.home}/jre/lib/rt.jar</systemPath> 
     </dependency> 
    </dependencies> 
</plugin> 

このような例外が発生しています。

WPSClient.java:22: cannot access java.lang.Object 
[wlwBuild] [Build] bad class file: C:\Java\jdk1.5.0_22\jre\lib\rt.jar(java/lang/Object.class) 
[wlwBuild] [Build] class file has wrong version 49.0, should be 48.0 
[wlwBuild] [Build] Please remove or make sure it appears in the correct subdirectory of the classpath. 
[wlwBuild] [Build] public static WPSServerRemote getWPSServer() throws MitchellException { 
[wlwBuild] [Build]^
[wlwBuild] [Build] 3 errors 
[wlwBuild] [Build] BUILD FAILED 
[wlwBuild] [Build] Compile failed; see the compiler error output for details. 
[wlwBuild] [Build] 
[wlwBuild] java.lang.reflect.InvocationTargetException 
[wlwBuild] java.lang.reflect.InvocationTargetException 
[wlwBuild]  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[wlwBuild]  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
[wlwBuild]  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
[wlwBuild]  at java.lang.reflect.Method.invoke(Method.java:592) 
[wlwBuild]  at workshop.core.Compile.start(Compile.java:19) 
[wlwBuild]  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[wlwBuild]  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
[wlwBuild]  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
[wlwBuild]  at java.lang.reflect.Method.invoke(Method.java:592) 
[wlwBuild]  at workshop.core.Starter.invokeStart(Starter.java:34) 
[wlwBuild]  at workshop.core.Compile.main(Compile.java:9) 
[wlwBuild] Caused by: java.lang.NoClassDefFoundError: org/apache/crimson/tree/XmlDocument 
[wlwBuild]  at workshop.util.ide.PreferencesNode._export(PreferencesNode.java:540) 
[wlwBuild]  at workshop.util.ide.PreferencesNode.exportSubtree(PreferencesNode.java:820) 
[wlwBuild]  at workshop.util.ide.PreferencesNode.flush(PreferencesNode.java:984) 
[wlwBuild]  at workshop.core.App$15.run(App.java:1000) 
[wlwBuild]  at workshop.core.asynctask.AsyncTaskManager.showDialogWhileRunning(AsyncTaskManager.java:272) 
[wlwBuild]  at workshop.core.asynctask.AsyncTaskManager.showDialogWhileRunning(AsyncTaskManager.java:482) 
[wlwBuild]  at workshop.core.App.exit(App.java:994) 
[wlwBuild]  at workshop.core.CompileHelper.compile(CompileHelper.java:298) 

私は私の設定JDK 1.4.2バージョンのmaven-antrun-プラグインを使って、私のクラスをコンパイルすることができますか教えてください。

答えて

0

新しいバージョンのJDKでは、古いJDKで実行されるコードをコンパイルできます。サーバー上のJDKのバージョンであれば、ターゲットを1.4に設定してください。

012の場合はjava compiler usage guideをチェックアウトし、ターゲットオプションをチェックしてコンパイラの処理方法を理解してください。

編集:明確にするために、ターゲットバージョンを呼び出す部分は$ {java-version}です。これはターゲットオプションとしてjavacに渡されます。マイナーバージョン番号が使用されていないので、1.4に伝えたいでしょう。

+0

こんにちはJon7、 ビルドから次のWeblogic Workshopコマンドを使用しようとしています。xmlと私はコマンドの下でjavac情報を提供することができませんので、私はmaven-antrun-pluginの下でコンパイラー情報を設定することを検討していますが、今まで私はこのプラグインに対してどのように異なるコンパイラー情報を提供できますか? 私のbuild.xml情報は次のとおりです。 <ターゲット名= "wbuild"> \t \t <プロジェクトをビルド= 「WPSEjb」/> のmaven-antrun-プラグイン – user886614

+0

下コンパイラとしてJDK 1.4.2を提供するために、どのように は、私は少しより明確にするために私の答えを編集しました。 – Jon7

+0

だから、の代わりに、1.4.2を渡す必要があります。 1.4 ?? – user886614

-2

次のコマンドを使用してビルドすることができます。

  <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>exec-maven-plugin</artifactId> 
      <version>1.2</version> 
      <executions> 
       <execution> 
       <id>install</id> 
       <phase>install</phase> 
       <goals> 
        <goal>exec</goal> 
       </goals> 
       </execution> 
      </executions> 
      <configuration>    
       <executable>C:\test\Ejb.bat</executable> 
      </configuration> 
      </plugin> 

私はEjb.batファイルの下ant -f build.xmlビルドコマンドを呼び出しています。どちらが私がbuild.xmlの下で与えるすべての設定を使用しているので、私は今JDK 1.4.2バージョンでビルドすることができます。

関連する問題