0

我正在使用 solaris,我在 jdk 1.6 上创建了一个 maven 应用程序,但使用 maven-compiler-plugin 将目标指定为 1.5。这是我的 pom.xml 的片段:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <source>1.5</source>
      <target>1.5</target>
    </configuration>
  </plugin>

虽然当我尝试在 solaris 盒子中运行时,我得到:

bash-2.05$ ./merchantInfoUpdate.sh
线程“主”java.lang.UnsupportedClassVersionError 中的异常:.class 文件中的版本号错误
        在 java.lang.ClassLoader.defineClass1(本机方法)
        在 java.lang.ClassLoader.defineClass(ClassLoader.java:620)
        在 java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
        在 java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
        在 java.net.URLClassLoader.access$100(URLClassLoader.java:56)
        在 java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        在 java.security.AccessController.doPrivileged(本机方法)
        在 java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        在 java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
        在 java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        在 java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

如果我运行mvn install -X(带调试)并且编译器插件告诉我:

[调试] 配置 mojo 'org.apache.maven.plugins:maven-compiler-plugin:2.0.2:compile' -->
[调试] (f) basedir = /home/emerson/newworkspace/java-batch-updater
[调试] (f) buildDirectory = /home/emerson/newworkspace/java-batch-updater/target
[调试] (f) 类路径元素 = [/home/emerson/newworkspace/java-batch-updater/target/classes, /home/emerson/.m2/repository/commons-logging/commons-logging/1.1.1/commons- logging-1.1.1.jar,/home/emerson/.m2/repository/log4j/log4j/1.2.12/log4j-1.2.12.jar]
[调试] (f) compileSourceRoots = [/home/emerson/newworkspace/java-batch-updater/src/main/java]
[调试] (f) compilerId = javac
[调试] (f) 调试 = 真
[调试] (f) failOnError = true
[调试] (f) fork = false
[调试] (f) 优化 = 假
[调试] (f) outputDirectory = /home/emerson/newworkspace/java-batch-updater/target/classes
[调试] (f) outputFileName = com.company.ingestion.updater-2010.01
[调试] (f) projectArtifact = com.yell:com.company.ingestion.updater:jar:2010.01
[调试] (f) showDeprecation = false
[调试] (f) showWarnings = false
[调试] (f) 源 = 1.5
[调试] (f) staleMillis = 0
[调试] (f) 目标 = 1.5
[调试] (f) 详细 = 假

emerson@emerson-desktop:~/newworkspace/java-batch-updater/target/expand$ 文件 com/yell/ingestion/updater/ListingsManager.class

com/yell/ingestion/updater/ListingsManager.class:已编译的 Java 类数据,版本 50.0(Java 1.6)

爪哇版:

bash-2.05$ java-版本
java版本“1.5.0_05”
Java(TM) 2 运行时环境,标准版(内部版本 1.5.0_05-b05)
Java HotSpot(TM) 服务器虚拟机(内部版本 1.5.0_05-b05,混合模式)

启动脚本内容:

bash-2.05 美元以上
库=库

   类路径=“。”
   for i in `find $LIB -name *.jar`; 做 CLASSPATH="$CLASSPATH:$i"; 完毕;
    导出类路径
   CLASSPATH=$CLASSPATH:资源/属性
java $* -cp $CLASSPATH com.company.ingestion.updater.ListingsManager

我确保它实际上是我正在构建的 jar 导致问题,将它单独留在应用程序类路径中,但我仍然得到同样的错误。

有任何想法吗?

谢谢

4

2 回答 2

1

您确定您在 Solaris 机器上使用的是 Java 1.5,而不是 1.4?java -version 的输出是什么?包含什么merchantInfoUpdate.sh?它是否将任何其他库 JAR 放入可以使用 Java 1.6 类文件格式编译的类路径中?

于 2010-08-19T11:11:28.437 回答
0

似乎 maven 以某种方式得出不需要编译类的结论·我重新运行安装干净,这次我可以看到正确的版本:

mvn 干净安装

接着..

文件 /home/emerson/newworkspace/java-batch-updater/target/classes/com/company/ingestion/updater/ListingsManager.class /home/emerson/newworkspace/java-batch-updater/target/classes/com/company/ ingestion/updater/ListingsManager.class:编译的 Java 类数据,版本 49.0 (Java 1.5)

感谢大家的帮助!

艾默生

于 2010-08-19T12:54:59.290 回答