我正在开发一个 Web 应用程序,该应用程序需要在旧版 WebSphere 服务器上运行,而该服务器在 1.5 JVM 上运行。
我的问题是,如果我在 pom 文件中将源/目标级别设置为 1.5,它就可以正常工作
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
直到我向我的项目添加依赖项:
<dependency>
<groupId>com.sparkjava</groupId>
<artifactId>spark-core</artifactId>
<version>1.1.1</version>
</dependency>
我检查了它的 pom 文件,它有 1.7 作为源/目标:
<configuration>
<source>1.7</source>
<target>1.7</target>
<optimize>true</optimize>
<debug>true</debug>
</configuration>
当我尝试启动我的应用程序时收到此错误:
Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(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:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
如果我在项目中设置目标级别,maven 会失败并出现另一个错误:
[ERROR] javac: source release 1.7 requires target release 1.7
我该如何解决这个问题?
最佳答案
您正在使用 Maven,这意味着 spark-core
依赖项正在从 Maven Central 中提取为 .jar 文件中的已编译字节码。
pom for that project on github是否已将其编译为 Java 7 字节码。我愿意打赌,这就是上传到 Maven Central 的内容。
您以 Java 5 为目标并使用该库的唯一方法是克隆项目,修改其 pom 以指定 1.5,然后构建您自己的 jar。
也就是说,鉴于他们在 pom 中指定了 1.7,它不太可能为十年前的 Java 版本构建;他们可能正在使用 Java 1.7 功能。
关于java - 如果我使用的库的源级别和目标级别为 1.7,如何将我的项目编译为 java 1.5?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21039703/