簡體   English   中英

Eclipse Mars:ANT不再支持JDK 1.6了嗎?

[英]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-with-resources,例如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

安裝很簡單:

  • 下載zip存檔*,將內容解壓縮到<eclipse_dir> / plugins。
  • 用參數-clean啟動eclipse(只有一次)
  • 通過外部工具配置為您的ANT任務配置JRE6 ...

有關該解決方案的更多詳細信息,請參閱此博客文章

Eclipse Mars放棄了對Java 6的支持:(

所以我們必須改為IntelliJ IDEA。

看到:

有一些相當混亂的事情!? 我的(Windows 7)環境是這樣的:

  • Eclipse Neon R2(4.6.2)
  • JDK 1.8啟動Eclipse
  • JDK 1.6是Eclipse中的默認JRE

在此配置中,此問題的一個“解決方案”(!)是使用鍵盤快捷鍵(或RMC-> Run as-> Ant Build)運行構建文件,而不在“外部工具配置”對話框中進行任何自定義

當我使用keyborard快捷方式(Alt-Shift-X,Q)時,構建文件工作正常(並且它確實從JDK 1.6啟動javawjavac ,就像我在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM