Ошибка запуска проекта Maven в Eclipse с использованием jdk1.5
ОС: Ubuntu 12.10
Затмение: 4.2
Java: jdk1.5.0_22 и jdk1.7
Apache Maven: 3.0.4
Maven home: / usr / share / maven
m2e: 1.2.020120903-1050
Я создал очень простой проект Maven "Hello, World" в Eclipse, чтобы протестировать его для переноса нашего собственного проекта (который использует 1.5). Мой pom.xml выглядит следующим образом:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>br.com.contmatic</groupId>
<artifactId>maven-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>MavenTest</name>
<description>teste do maven</description>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Я установил J2SE-1.5 (jdk1.5.22) в моем пути сборки проекта. Тем не менее, пытаясь запустить Maven Clean или Maven Install из Eclipse, я получаю следующую ошибку:
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 org.codehaus.plexus.classworlds.realm.ClassRealm.loadClassFromSelf(ClassRealm.java:386)
at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:42)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:244)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:230)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at org.apache.maven.cli.MavenCli.container(MavenCli.java:375)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:191)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:592)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Погуглив, я обнаружил, что это происходит, когда jre-версия, используемая для компиляции, отличается от той, что использовалась для запуска. Изменение всего на 1.7 (как pom.xml, так и пути сборки) исправляет ошибки, которые предполагают, что он либо компилируется, либо запускается с использованием Java 1.7.
Но я не могу найти ошибку в моей конфигурации.
при беге
mvn clean install
в терминале maven строит проект без ошибок.
Что я могу делать не так в Eclipse?
1 ответ
Оказывается, некоторые из моих зависимостей Maven не были скомпилированы с 1.5, что вызвало проблему. Это не происходило в консоли, потому что я уже установил Java 1.7 по умолчанию.
К счастью, я смог построить свой проект, используя 1.7 и указав 1.5 для запуска компиляции и выполнения. Вот как:
в Eclipse>Run>Run Configurations>Maven Build>New, у меня была эта конфигурация:
Главная вкладка
Базовый каталог:
${project_loc}
Цели:
clean install
Я просто выбрал вкладку JRE и выбрал Alternate JRE, используя мою версию 1.7 SDK.
Затем мне пришлось включить 1.5 в качестве источника и цели для maven-compiler-plugin my pom.xml, как таковой:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<encoding>ISO-8859-1</encoding>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
И это работает.