Sagan 專案:升級至 JDK 8

工程 | Chris Beams | 2014年4月18日 | ...

相信大多數讀者都知道,Java SE 8 已於上個月發佈。配合近期 STS 3.5.0 的發佈及其對 JDK 8 的完整支援,我們認為現在是升級 Sagan 以利用新的語言功能和 API 的理想時機。

注意:還不熟悉 Sagan 專案嗎?它是 Spring 的參考應用程式,為本部落格以及 spring.io 上的所有內容提供支援。請查看本系列的前三篇文章以了解更多詳細資訊。

Cloud Foundry 的 Java buildpack 自發佈之日起就已提供對 JDK 8 的支援。為了開始使用它,我們建立了 buildpack 的fork,將 JDK 版本從 1.7.0 提升到 1.8.0,並配置了 Gradle build 以在將 Sagan 部署到生產環境時使用我們的 fork。

注意:在不久的將來,1.8.0 將成為 Cloud Foundry build pack 的預設版本,屆時將不再需要上述的 fork 操作。

您可能已經注意到,Sagan 使用 Travis CI 進行持續整合和部署,而將我們的 Travis 配置更新為使用 JDK 8 非常簡單。

當然,升級最有趣的方面是程式碼本身的變更。查看 pull request #348 中的提交,您會看到變更分為幾個類別,包括重構以使用 lambda 表達式並利用 JDK 8 強大的新 Stream API。

舉一個非常簡單的例子,從這樣的程式碼變成這樣真是太好了

List<String> projectVersions = new ArrayList<>();
for (ProjectRelease projectRelease : project.getProjectReleases()) {
    projectVersions.add(projectRelease.getVersion());
}

變成這樣

List<String> projectVersions = project.getProjectReleases().stream()
    .map(ProjectRelease::getVersion)
    .collect(Collectors.toList());

或者,在單元測試中,從繁瑣的

mockMvc.perform(createPostRequest)
    .andExpect(new ResultMatcher() {
        @Override
        public void match(MvcResult result) {
            String redirectedUrl = result.getResponse().getRedirectedUrl();
            assertThat(redirectedUrl, startsWith("/admin/blog"));
        }
    });

變成簡潔易讀的

mockMvc.perform(createPostRequest)
    .andExpect(result -> {
        String redirectedUrl = result.getResponse().getRedirectedUrl();
        assertThat(redirectedUrl, startsWith("/admin/blog"));
    });

當然,您在上面看到的只是 JDK 8 中 streams、lambda 表達式和方法參考所能實現功能的一小部分。有一些新概念需要學習,但您會很高興這樣做!為此,我們建議閱讀 Venkat Subramanian 出色的 Functional Programming in Java 一書。

我們還可以進行其他變更,以充分利用 JDK 8 提供的功能,其中之一是將我們對 java.util.Date、java.util.Calendar 和 java.util.TimeZone 的使用轉換為 JDK 8 新的 Date and Time API。我們已建立 issue #360 來執行此操作,如果您有興趣協助實現,我們很樂意與您合作完成 pull request。請查看貢獻者指南,並在該 issue 的評論中告知我們您有興趣。

無論如何,如果您一直很好奇想查看和使用 JDK 8 中的新功能和 API,我們希望您會發現 Sagan 應用程式的這些變更是一個有用的參考。

注意:如果您已經在本機檢出了 Sagan 儲存庫,則需要重新產生 IDE 專案元數據,以確保您針對 1.8 級語言功能正常工作。《專案 Wiki》已更新,以反映正確的要求和執行步驟。

此外,為了更全面地了解 JDK 8 在語言和 API 層面提供的功能,請務必查看 Benjamin Winterberg 出色的 Java 8 Tutorial 和 Java SE 8 API Explorer。


SpringOne 2GX 2014 即將到來

今年的 SpringOne 將於 9 月 8 日至 11 日在德州達拉斯舉行,超級早鳥註冊現已開放。我們希望在那裡見到您!

取得 Spring 電子報

保持與 Spring 電子報的聯繫

訂閱

領先一步

VMware 提供培訓和認證,以加速您的進展。

了解更多

取得支援

Tanzu Spring 在一個簡單的訂閱中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進制檔案。

了解更多

即將到來的活動

查看 Spring 社群中所有即將到來的活動。

查看所有