[英]Eclipse Mars: ANT doesn't support JDK 1.6 anymore?
當我使用JDK6在Eclipse Mars中調用ANT腳本(運行方式> Ant Build ...> JRE> Separate JRE)時,出現以下錯誤消息:
出現問題: 不支持小於1.7的JRE版本。
這只是一個bug還是故意的? 我在Eclipse上找不到相應的錯誤報告。 那么Eclipse為ANT放棄了Java 6支持?!
我們使用自定義ANT插件修復了問題。 它取代了Mars捆綁的ANT插件。 原始插件不支持Java <7,因為它是用Java 7語法編寫的,它檢查了Java版本。 很容易替換Java7語法以與> = 5兼容並刪除Java 7檢查。
兩個語法“問題”是:
List<MyObject> list = new ArrayList<>();
try (InputStream stream = createInputStream()) { ...}
Diamond運營商的向后兼容性:
List<MyObject> list = new ArrayList<MyObject>();
並嘗試資源:
InputStream stream;
try
{
...
}
finally
{
stream.close();
}
在我們使用自定義插件替換捆綁插件后,可以像往常一樣使用自定義JRE啟動ANT任務。
可以使用Eclipse git存儲庫中的原始源創建自己的ANT插件: http ://git.eclipse.org/c/platform/eclipse.platform.git/refs/tags(使用標簽ID:I20150430-1445)或者使用我的預編譯包: Eclipse Mars ANT插件,支持Java <7
安裝很簡單:
有關該解決方案的更多詳細信息,請參閱此博客文章 。
Eclipse Mars放棄了對Java 6的支持:(
所以我們必須改為IntelliJ IDEA。
看到:
有一些相當混亂的事情!? 我的(Windows 7)環境是這樣的:
在此配置中,此問題的一個“解決方案”(!)是使用鍵盤快捷鍵(或RMC-> Run as-> Ant Build)運行構建文件,而不在“外部工具配置”對話框中進行任何自定義 !
當我使用keyborard快捷方式(Alt-Shift-X,Q)時,構建文件工作正常(並且它確實從JDK 1.6啟動javaw
和javac
,就像我在Process Explorer中觀察到的那樣),但是一旦我修改了“啟動配置”(例如選擇一個新目標),然后我也開始得到“不支持小於1.7的JRE版本”錯誤!?
如果在收到錯誤后,我進入“外部工具配置...” - >“刪除選定的啟動配置”,然后使用鍵盤快捷鍵啟動構建,它再次起作用!?
顯然,@ rjahn上面提到的“JDK必須> = 1.7”檢查(默認的ant插件)並不總是被執行,但我沒有一直調試它以查看原因...
啟動ant構建環境需要Java 1.7,但您可以使用任何JDK編譯類文件。 默認情況下,ant使用來自啟動環境的javac和javaw,但您可以在ant任務中覆蓋它。
我在示例中使用了以下常量:
<property name="javac.location" value="c:/Program Files/Java/jdk1.6.0_45/bin/javac.exe" />
<property name="java.location" value="c:/Program Files/Java/jdk1.6.0_45/bin/javaw.exe" />
Java編譯:您可以定義名為“executable”的javac位置參數:
<javac srcdir="@{source.dir}" destdir="@{target.dir}" debug='@{debug}' encoding="UTF-8" fork="true" source="@{source}" target="@{target}" executable="${javac.location}">
在此之后,ant使用javac從JDK 1.6編譯類文件。
要使用java 1.6從ant運行應用程序,請對java任務使用jvm參數:
<java classname="com.google.gwt.dev.Compiler" fork="yes" failonerror="true" maxmemory="${gwt.compile.maxmemory}" jvm="${java.location}">
默認情況下,某些ant任務使用默認編譯器,例如wsimport-ant任務(它從wsdl生成源文件並使用默認java編譯它)。 要防止這種情況,請使用-Xnocompile參數運行wsimport,並使用javac編譯生成的源文件(參見上文)。
<wsimport-ant xadditionalHeaders="true">
<xjcarg value="-XautoNameResolution" />
<arg value="-d" />
<arg value="${src-gen.dir}/wsdls" />
<arg value="-keep" />
<arg value="@{wsdlsource}" />
<arg value="-Xnocompile" />
</wsimport-ant>
這種方法在最新的Eclipse(Neon .3)和Oracle JDK 1.6(或任何其他JDK)中完美運行。
Java 6和7不再從Oracle 接收公共更新 。 雖然您可以很好地針對舊版本的運行時庫進行編譯以滿足這些要求,但您應該使用較新的JRE來實際運行任何內容。
這只是簡單的愚蠢。 我們還必須切換回舊版eclipse或切換到其他IDE。 遺留系統仍然在1.6中運行,當你可以在火星上創建1.6 jre的項目時,ant也應該能夠在1.6中本地編譯它。
另一個解決方案是在你調用javac的地方更新你的build.xml。 在企業建設中,它將是100個地方。
似乎每個eclipse版都搞砸了一些基本的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.