Я пытался заставить это работать некоторое время, но пока не повезло.Maven - использовать JDK 7 для компиляции для JVM 5
Я хочу работать с JAVA_HOME
указывающих на JDK7, но я хочу, чтобы скомпилировать проект для виртуальной машины Java 5. Я прочитал documentation, я нашел similar posts на 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]
is not abstract and does not override abstract methodgetParentLogger()
inCommonDataSource
Насколько я понял, что класс был обновлен в 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]
error: packagejavax.crypto
does not exist
Который является достаточно справедливым , так как я не включил jce.jar
(классы криптографии) в bootclasspath
. Тем не менее, есть что-то, что меня озадачивает. Несмотря на то, что bootclasspath
содержит только среду выполнения Java 5, у меня есть много библиотек из JRE7 в пути к классам. Они нигде не указаны.
[search path for class files: c:\Program Files (x86)\Java\jdk1.5.0_22\jre\lib\rt.jar,c:\Program Files\Java\jdk1.7.0_02\jre\lib\ext\dnsns.jar,c:\Program Files\Java\jdk1.7.0_02\jre\lib\ext\localedata.jar,c:\Program Files\Java\jdk1.7.0_02\jre\lib\ext\sunec.jar,c:\Program Files\Java\jdk1.7.0_02\jre\lib\ext\sunjce_provider.jar,c:\Program Files\Java\jdk1.7.0_02\jre\lib\ext\sunmscapi.jar,c:\Program Files\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>
The type [ClassName] must implement the inherited abstract method CommonDataSource.getParentLogger()
Я также вижу никаких следов rt.jar
не загружается, но я не получите java.lang
не найдена ошибка, поэтому есть некоторые классы, которые загружаются в путь к классам.
Я исправлю это временно, выполнив пакетный скрипт, который перезаписывает JAVA_HOME
перед его созданием и устанавливает его обратно, но я действительно хочу, чтобы это было сделано правильно. Это не похоже на такой крайний случай использования. :)
Что я здесь делаю неправильно?
Проверьте мои примеры, я использую его таким образом, но он не работает, если я укажу несколько банок. Я что-то упускаю? –