gpt4 book ai didi

maven-2 - maven-antrun-plugin 1.6 想用Java 1.4.2 版本编译类

转载 作者:行者123 更新时间:2023-12-04 18:22:23 24 4
gpt4 key购买 nike

我正在使用 ant build.xml 生成类并使用 JDK 中的 tools.jar 编译它们。

我正在使用 MAVEN 2.2.1 版本。 JDK 1.5 来执行 MAVEN。由于 maven 2.2.1 版本只支持高于 JDK 1.5 的版本,所以我必须使用它。

此 maven-antrun-plugin 不允许为编译器指定源版本或目标版本。
因此,生成的类是针对当前运行的 JVM JDK 编译的,使用它的 rt.jar 和插件依赖项中提供的 tools.jar(或放在 jvm 的 lib/ext 目录中)。

由于 Maven 在 1.5 JVM (jdk1.5.0_22) 中执行,我的项目需要使用 JDK 1.4.2 版本编译这些类,因为我要部署它们的服务器在 1.4 JVM 上运行,所以我遇到异常当我从我的 Eclipse 或命令行使用 MAVEN 插件进行编译时。

我找不到告诉 antrun 使用不同的 java 版本编译我的类的方法。
我尝试了以下解决方法:

  • 将 tools.jar 依赖项更改为指向 1.4 版本 => 因为编译器使用当前运行的 1.5 JVM 中的 rt.jar,类文件版本不匹配(版本 49.0,预期为 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-plugin 编译我的类。

    最佳答案

    较新版本的 JDK 可以编译代码以在较旧的 JDK 上运行。如果这是您服务器上的 JDK 版本,只需将您的目标设置为 1.4。

    您可能想查看 java compiler usage guide对于 1.5 并查看目标选项以更好地了解编译器如何处理此问题。

    编辑:为了澄清,你的 pom 中调用目标版本的部分是 ${java-version}。这将作为目标选项传递给 javac。你会想告诉它 1.4,因为没有使用次要版本号。

    关于maven-2 - maven-antrun-plugin 1.6 想用Java 1.4.2 版本编译类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7018085/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com