BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Spring IO Platformリリース

Spring IO Platformリリース

原文(投稿日:2014/07/03)へのリンク

Pivotalは先週Spring IO Platform 1.0のファーストバージョンをリリースした。Spring IO Platformは依存物(とそのバージョン)のリストであり、すべての依存物が一緒に動作する。実装はMavenのPOMファイルであり、自分のプロジェクトにインポートして依存物にバージョンを設定できる。これらの依存物は、Springプロジェクト全体と多くのオープンソースプロジェクトで管理され、利用されている。例えば、次のオープンソースライブラリで使われている。Logback、 Jackson、Guava、JSF、JSTL、JUnit、Derby、Hadoop、Solr、Tomcat、Groovy、EclipseLink JPA、Neo4j、TestNGだ。

発表によれば

Spring IOは究極的には単なるライブラリであり、アプリケーションのCLASSPATHに含まれています。ビルドツールの<dependencyManagement/>を使って特定のバージョンの依存物を選択することができる。バージョンの管理は究極的には提案と利便性であり、要件ではない。

Spring IOはJava 1.7と1.8で動作保証されている。しかし、プロジェクトによっては古いJDKでも問題なく動作する。必要なのはJava SEだけでGroovy、Grails、Java EEをサポートする。プラットフォームとしては、組み込みのランタイムに配置することも、従来のアプリケーションサーバにも配置できる。PaaS環境でも利用できる。

このリリースについて詳しく知るため、InfoQはSpring Developer AdvocateであるJosh Long氏に話を聞いた。

InfoQ: このソリューションはどのような問題を解決するのでしょうか。

Spring IOのリリースは私たちが既に提供しているさまざまなフレームワーク/ライブラリについて考えるための論理的な方法になります。また、こららのフレームワークを使うための簡単な方法も提供します。実際には、私たちはSpring IOの部品表のMavenアーティファクトをリリースしたのです。クライアントのMavenビルドにインポートされた依存物として含まれている場合、すべてのSpringプロジェクト(Spring Boot、Spring frameworkなど)の依存物のバージョン、そして、Hibernateのようなサードパーティのエコシステムライブラリを規定します。

シンプルにアーティファクト上で依存物を宣言し(例えば、Spring BootウェブサポートのMavenの'groupId'は 'org.springframework.boot'で、Mavenの'artifactId'は'spring-boot-starter-web'です)、バージョンは廃止します。Spring IO BOMは選択したすべてのライブラリが互いに問題なく動作すること、共通の依存物が同じバージョンに標準化されることを保証します。これによって、プラットフォームのBOM上で最新のMavenのビルド依存物を更新するだけで、最新のライブラリを簡単に利用できるようになります。

例えば、以下の例では、MavenビルドでSpring IO BOMを使っています。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.spring.platform</groupId>
            <artifactId>platform-bom</artifactId>
            <version>1.0.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

もちろんこれは、ビルドツールの機能です。どんなライブラリのどんなバージョンでも利用できます。Mavenプロパティ('hibernate.version'のような)で共通のライブラリバージョンを定義し、素早くオーバライドできるようにします。

MavenビルドにSpring IO BOMを含めても、定義したすべての依存物をロードすることにはならない。代わりに、バージョン番号を明示するのに使われる。バージョン番号をオーバライドすることも、依存物を除外することもできる。Springのバージョンをオーバライドするには、<spring.version>プロパティを定義する。依存物を除外するには、通常と同じように依存物を追加すれば除外してくれる(またはMaven 3のワイルドカードを使った除外の仕組みも使える)。

さらに詳しくこの仕組みを理解するには、CXFとSpringを使ったApache Camelプロジェクトを見るのがいいだろう。Spring IO BOMをインポートして、依存物のバージョンを取り除き、バージョンを定義しているプロパティを削除している。管理対象ではない依存物(Apache CamelとCXF)にはバージョンを定義しておく必要がある。下のgistは、pom.xmlがどのように変わるかを示している。Apache Camel 2.14-SNAPSHOTはpull request 199を統合すればSpring 4で動作する。

Redditでの反応はさまざまだ。Springのスタックがなければ、Grailsに似ているとコメントする人もいる。歓迎するコメントもある。XMLを必要としないので、Spring 4と相性がいい、と考える人もいる。Springを批判する陣営は代替としてJava EEを薦めているようだ。

PivotalのP.O.V.ブログでは、今回のリリースを"Javaのコンシュマライゼーション"と呼んでいる。GoPivotalブログのマネージングエディタであるStacy Schneider氏はこの動きをAppleがハードウェアの世界で起こした動きと比べている。氏は、有名なSteve Jobs氏の発言を引用している

 "Appleは統合されたモデルを目指します。ユーザがシステムインテグレータにならなくて済むようにするためです。"

氏は、Spring IO Platform 1.0を使うことの利点を列挙している。

  • テストがシンプルになること。ベースラインダウンロードにはすでに動作が保証されているモジュールとバージョンが含まれている。
  • 構成が簡単。互換性を確かめるための時間が必要なくなる。
  • 柔軟性。開発者は軽量な手法の場合に必要ものを利用できる。アプリに必要なSpring IO Platformの部分だけを使えばいい。
  • 一定のリリースサイクル。Spring IO Platformは半年に1回のリリースで、リリースサイクルを予測できる。

Schneider氏は今回のリリースには、従来はSpringプロジェクトのコアではないと思われていたモジュールも追加されている、という。特にアプリケーション向けのドメイン特化ランタイム(DSR)だ。DSRはスタンドアロンで動作し、外部のコンテナに配置する必要がない。現時点では、3つのDSRがある。Spring XD、Spring Boot、Grailsだ。Spring XDはGAになった時点でSpring IO Platformに含まれる。

この記事に星をつける

おすすめ度
スタイル

BT