Я пытался заставить это работать какое-то время, но пока не повезло.
Я хочу запустить с JAVA_HOME
, указывая на JDK7, но я хочу скомпилировать проект для JVM 5. Я прочитал documentation, Я нашел похожие сообщения на SO, но ни один из них, похоже, не работает в моей настройке.
Сначала я попытался установить только target
и source
, но я получил ошибку:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
[ClassName]
не является абстрактным и не отменяет абстрактного методаgetParentLogger()
вCommonDataSource
Насколько я понял, этот класс был обновлен в JDK 7, и добавлен дополнительный метод, который бросает ошибку. Мне нужно использовать среду выполнения JDK 5, которая имеет старую реализацию, и все должно работать нормально. Поэтому я делаю это:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<verbose>true</verbose>
<source>1.5</source>
<target>1.5</target>
<compilerArguments>
<bootclasspath>${env.JAVA5_HOME}/jre/lib/rt.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
У меня JAVA5_HOME правильно установлен в моей системе, я вижу, что он загружает правильные классы в журнал, но я ударил еще одну ошибку:
[loading ZipFileIndexFileObject[c:\Program Files\Java\jdk1.5.0_22\jre\lib\rt.jar(*.class)]]
...
...[ClassName]
Ошибка: пакетjavax.crypto
не существует
Это справедливо, так как я не включил jce.jar
(классы криптографии) в bootclasspath
. Тем не менее, есть что-то, что меня озадачивает. Несмотря на то, что bootclasspath
содержит только среду исполнения Java 5, у меня есть много библиотек из JRE7 в пути к классам. Они нигде не указаны.
[путь поиска для файлов классов: c:\Program Files (X86)\Java\jdk1.5.0_22\JRE\Lib\rt.jar, C:\Program Files\Java\jdk1.7.0_02\JRE\Lib\вн\dnsns.jar, C:\Program Files\Java\jdk1.7.0_02\JRE\Lib\вн\localedata.jar, C:\Program Files\Java\jdk1.7.0_02\JRE\Lib\вн\sunec.jar, C:\Program Files\Java\jdk1.7.0_02\JRE\Lib\вн\sunjce_provider.jar, C:\Program Files\Java\jdk1.7.0_02\JRE\Lib\вн\sunmscapi.jar, C:\Program Файлы \Java\jdk1.7.0_02\jre\lib\ext\zipfs.jar,...]
Если я попытаюсь добавить jce.jar(из JRE5), я вернусь к первой ошибке:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<verbose>true</verbose>
<source>1.5</source>
<target>1.5</target>
<compilerArguments>
<bootclasspath>${env.JAVA5_HOME}/jre/lib/rt.jar${path.separator}${env.JAVA5_HOME}/jre/lib/jce.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
Тип [ClassName] должен реализовать унаследованный абстрактный метод CommonDataSource.getParentLogger()
Я также не вижу следов rt.jar
, загружаемых, но я не получаю ошибку java.lang
not found, поэтому в пути к классам загружаются некоторые классы.
Я исправлю это временно, сделав пакетный пакет script, который перезаписывает JAVA_HOME
перед созданием и устанавливает его обратно, но я действительно хочу, чтобы это было правильно. Это не похоже на такой крайний случай использования.:)
Что я здесь делаю неправильно?