プロジェクトに SDK を含めます
HERE Workspace で実行されるアプリケーションは、次のコンポーネントに依存している可能性があります。
-
ロケーション ライブラリ、データ プロセッシング ライブラリ、データ クライアント ライブラリなどの Java & Scala ライブラリ用の HERE Data SDK 。
-
ランタイム環境の一部として提供されるライブラリ。 Workspace では、バッチとストリームの 2 つのランタイム環境がサポートされています。 バッチ環境では 、 Apache Spark アプリケーションが使用する最小限の量のライブラリが提供されます。 ストリーム環境には 、 Apache Flink アプリケーションが使用するライブラリが用意されています。
-
HERE Map Content 、 HERE Weather 、またはユーザーが指定したスキーマなど、データのエンコードとデコードを行うための Protobuf スキーマ。
前述のすべての種類の依存関係について、 HERE Data SDK では、これらの依存関係を管理するさまざまな方法を提供しています。
HERE Data SDK ライブラリ
Data SDK 内のライブラリのバージョンが異なります。 たとえば、データ プロセッシング ライブラリ 3.1.13 およびデータ クライアント ライブラリ 0.2.24 は、同じ Data SDK リリースの一部です。 また、 Data SDK 内には相互依存性があります。たとえば、ロケーション ライブラリとデータ プロセッシング ライブラリはデータ クライアント ライブラリに依存しているため、依存関係を管理する際に考慮する必要があります。
依存関係管理を支援するために、 Data SDK には部品表 (BOM) ファイルが用意されています。 各 BOM は、これらのライブラリの互換性のあるバージョンを一覧表示する Maven POM ファイルです。
3 つの異なる BOM ファイルがあります。
- Scala 2.12:
-
sdk-batch-bom_2.12.pom
- このファイルには、 HERE Data SDK for Java & Scala ライブラリの互換性のあるバージョン、それらの依存関係、および HERE Workspace バッチ 3.0.0 ランタイム環境( Apache Spark 2.4.7 )によって提供されるライブラリが含まれています。 Scala 2.12 でのバッチ処理のための SDK ライブラリを参照してください。 sdk-stream-bom_2.12.pom
- このファイルには、互換性のあるバージョンの Data SDK ライブラリ、それらの依存関係、および HERE Workspace ストリーム 5.0 ランタイム環境( Apache Flink 1.13.5 )によって提供されるライブラリが含まれています。 Scala 2.12 でのストリーム処理用 SDK ライブラリを参照してください。 -
sdk-standalone-bom_2.12.pom
- このファイルには、 Data SDK とその依存関係の互換性のあるライブラリが含まれています。 この POM ファイルを使用して、自分の環境でアプリケーションを実行します。 Scala 2.12 でのスタンドアロンモードでの使用については、 SDK ライブラリを参照してください。
依存関係を解決するには、リポジトリ資格情報が必要です。
BOM を含む
プロジェクトの POM ファイルに BOM ファイルを含めるには、次の 2 つの方法があります。
-
親 POM ファイルとして ( 推奨 ):
<parent>
<groupId>com.here.platform</groupId>
<artifactId>sdk-batch-bom_2.12</artifactId>
<version>2.54.3</version>
</parent>
-
または、プロジェクトにすでに親がある場合は import
、依存関係にを使用します。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.here.platform</groupId>
<artifactId>sdk-batch-bom_2.12</artifactId>
<version>2.54.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
注
例すべての
コードスニペットは sdk-batch-bom_2.12
例として使用しますが、 sdk-stream-bom_2.12
およびにも同じ命令が適用され sdk-standalone-bom_2.12
ます。 1 つのプロジェクトで使用する SDK BOM ファイルは 1 つだけであることに注意してください。
ファイルにはプラグイン管理セクションと便利なプロパティが含まれているため、 BOM ファイルを親として含めることをお勧めします。
たとえば sdk-batch-bom_2.12
、およびのプラグイン管理セクション sdk-stream-bom_2.12
に platform
は、ファット JAR を作成するプロファイルが含まれています。 クラウドでアプリケーションを実行する前に、このファット JAR をワークスペースにアップロードする必要があります。
注
platform
プロファイルでは、パイプライン 内から JAR を使用するときに適切に動作するように、一部のファイルが除外され、一部のライブラリが色分けされます。 特に、 application.properties
platform
sdk-stream-bom_2.12
application.properties
ランタイムによって提供されたファイルを上書きしないように、ファイルはファイルのプロファイルから除外されます。
プラグイン管理セクションと platform
プロファイルのもう 1 つの重要な部分は、 protobuf-java
3 つ以上を色分けする maven-shade-plugin
ことです。 protobuf-java
ライブラリおよび Apache Spark で使用されている Apache Flink のバージョンと、 Data SDK ライブラリおよび Protobuf レイヤースキーマで使用されているこのライブラリのバージョンとの間に競合があるため、シェーディングメカニズムが必要です。 Data SDK では新しいバージョン 3 以降が使用されますが、ストリーム環境とバッチ環境の両方で Protobuf 2+ が提供されます。
platform
プロファイルは mvn -Pplatform package
、またはのようにアクティブ化でき mvn --activate-profiles=platform package
ます。
ファイルを親として POM に含めることができない場合は、ファイルの内容を確認し、プロパティをコピーして、プロジェクトに関連するプラグイン管理設定を行います。
依存関係を含める
プロジェクトに BOM ファイルが含まれるとすぐに、プロジェクトはライブラリの実際のバージョンを指定せずに、 Data SDK ライブラリまたは依存関係を参照できます。
<dependencies>
<dependency>
<groupId>com.here.platform.data.processing</groupId>
<artifactId>pipeline-runner-java_2.12</artifactId>
</dependency>
</dependencies>
このアプローチにより、 Data SDK の 1 つのバージョンから新しいバージョンへの移行が簡素化されます。 のバージョンを変更 sdk-batch-bom_2.12
すると、すべての Data SDK ライブラリのバージョンとその依存関係、およびバッチ環境によって提供されるライブラリのバージョンが更新されます。
このアプローチでは、 1 つの Data SDK バージョンからより新しいバージョンへの移行が簡素化されます。 sdk-batch-bom_2.12
プロジェクトののバージョンを変更すると、プロジェクトでは次の更新バージョンが使用されます。
- Data SDK ライブラリ
- すべての Data SDK ライブラリの依存関係
- バッチ環境によって提供されるライブラリー
異なるバージョンのパッケージに依存するアプリケーションが BOM で定義されている場合、次のようなランタイム例外が表示されることがあります。
ClassNotFoundException
NoSuchMethodError
これらの例外は、ランタイム環境で提供されているライブラリでクラスまたはメソッドが見つからない場合に発生します。 次の 2 つの一般的なケースがあります。
- ランタイム環境には古いバージョンのライブラリが含まれています。アプリケーションには新しいメソッドとクラスを持つ新しいバージョンが必要です。
- ランタイム環境には新しいバージョンのライブラリが含まれていますが、古いバージョンから削除された廃止予定のメソッドまたはクラスが使用されています。
ライブラリがプロジェクトで参照されている場合は、 BOM ファイルから対応するバージョンのライブラリを使用できます。 ただし、一時的な依存関係のいずれかのバージョンが、ランタイム環境で提供されているバージョンと競合している可能性があります。 この場合、この推移的な依存関係を非表示にする必要があります。 ライブラリをシェード表示する方法の例については、 sdk-batch-bom_2.12
または sdk-stream-bom_2.12
の platform
プロファイルを参照してください。 このプロファイルで protobuf-java
は、前述のようにパッケージが色分けされます。
依存関係と BOM をインポートする方法の詳細について は、『 Maven 依存関係管理ガイド』を参照してください。
注
アーカイブ
ワークスペースが提供する バッチ および ストリーミングの 原型には、 BOM が含まれており、プロジェクトの POM ファイルに必要な依存関係があります。 Maven 構築システムのみがこれらの原型をサポートしています。
パイプラインランタイム環境ライブラリ
HERE Workspace は、位置データベースのアプリケーションを実行するためのバッチパイプラインおよびストリーミングパイプラインを提供します。 各パイプラインジョブは、特定のランタイム環境内で実行されます。 この環境は、次の要素で構成されています。
- Java ランタイム環境 (JRE)
- Apache Spark または Apache Flink フレームワーク
バッチ( Spark )またはストリーミング( Flink )環境には、 Java 仮想マシン( JVM )によってロードされたパッケージのリストが含まれており、他のアプリケーションによって提供されたパッケージよりも優先されます。
ランタイム環境の一部であるパッケージのリストを記述するために、 Data SDK には次の 2 つの環境 BOM が用意されています。
- Scala 2.12:
environment-batch-3.0.0.pom
environment-stream-5.0.2.pom
ランタイム環境のパッケージは provided
、対応する環境 BOM でとしてマークされます。 たとえば、 Apache Spark パッケージ spark-core
は provided
、次のようにマークされてい environment-batch-3.0.0.pom
ます。
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${scala.compat.version}</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
sdk-batch-bom_2.12
および sdk-stream-bom_2.12
ファイルには、対応する environment-batch-3.0.0.pom
および environment-stream-5.0.2.pom
ファイルが含まれていることに注意してください。 対応する環境 POM ファイルを使用する sdk-batch-bom_2.12
か sdk-stream-bom_2.12
、または明示的に含める必要のないプロジェクト。 パイプラインランタイム環境によって提供されるライブラリの詳細については、対応する環境 POM ファイルを参照してください。
Protobuf スキーマ
HERE Workspace を使用すると、ユーザーは Protobuf スキーマを定義してワークスペースに配布できます。 スキーマは 'Maven プロジェクトの HERE Maven Wagon プラグイン または SBT プロジェクトの非公式 の HERE SBT Resolver プラグイン を使用した場合にのみアクセスできる ' 特別なリポジトリに保存 されます
プラグインの設定および使用を開始するに は、 HERE platform 資格情報が必要です。
Maven プロジェクト
Maven Wagon プラグイン で使用するプロジェクトを設定するには ' 次の手順に従います
-
最新バージョンの Maven を使用して 'Maven Wagon プラグイン をプロジェクトに追加します バージョン番号については、 HERE Maven Wagon プラグイン ページを参照してください。
<build>
<extensions>
<extension>
<groupId>com.here.platform.artifact</groupId>
<artifactId>artifact-wagon</artifactId>
<version>${artifact.wagon.version}</version>
</extension>
</extensions>
</build>
-
HERE アーティファクトサービスリファレンスをプロジェクトに追加します。 here+artifact-service://artifact-service
プレースホルダーは、資格情報 に基づいて動的にプラグイン に置き換えられます。
<repositories>
<repository>
<id>HERE_PLATFORM_ARTIFACT</id>
<layout>default</layout>
<url>here+artifact-service://artifact-service</url>
</repository>
</repositories>
-
以下の管理者配置プロファイル の例のように、プロジェクトのスキーマ に依存関係を追加します。 追加するスキーマ の値を使用します。
<dependencies>
<dependency>
<groupId>com.here.schema.rib</groupId>
<artifactId>administrative-place-profiles_v2_java</artifactId>
<version>2.88.0</version>
<type>jar</type>
</dependency>
</dependencies>
スキーマ のコード スニペット を検索するに は、 HERE ポータル に移動します。 含める共有スキーマ を探し 、Artifacts
タブを開きます。
Maven Wagon プラグイン の設定の詳細について は 'Maven Wagon プラグイン の HERE platform を参照してください
SBT プロジェクト
SBT リゾルバプラグイン で使用するようにプロジェクトを設定するには、次の手順に従います。
-
次のエントリをprojects/plugins.sbt
ファイルに追加して、sbt-resolver
プラグイン を登録します。
addSbtPlugin("com.here.platform.artifact" % "sbt-resolver" % sbtResolverVersion)
-
HERE アーティファクトサービスリファレンスをプロジェクトに追加します。 here+artifact-service://artifact-service
プレースホルダーは、資格情報 に基づいて動的にプラグイン に置き換えられます。
resolvers += "HERE_PLATFORM_ARTIFACT" at "here+artifact-service://artifact-service"
-
次の管理者配置プロファイルの例のように、build.sbt
ファイルに次の宣言を含めることで、プロジェクトのスキーマ に依存関係を追加します。 追加するスキーマ の値を使用します。
libraryDependencies += "com.here.schema.rib" %% "administrative-place-profiles_v2_scala"% "2.88.0"
スキーマ の詳細については 、 HERE ポータル を参照してください。 含める共有スキーマ を探し 、Artifacts
タブを開きます。
SBT リゾルバプラグイン の設定の詳細について は、 HERE SBT Resolver プラグイン ページを参照してください。
新しいスキーマ を作成して公開する方法の詳細について は、「スキーマの作成と拡張」を参照してください。
Scala 2.11 から Scala 2.12 への移行ガイド
このセクションでは、 Scala 2.11
から Scala 2.12
にアプリを移行するために行う必要があるハイレベルな変更について説明します。 HERE Data SDK for Java & Scala 2.28 リリースの一部として Scala 2.12
サポートが導入されました。
-
_2.12
各環境にサフィックスが付いた新しい SDK BOM ファイルが追加されました。 Scala 2.12
に移行するには、 SDK BOM artifactId
を次のように更新して _2.12
サフィックスを追加します。
-
使用 _2.11
するサフィックスでアプリの依存関係 _2.12
を変更します。 _${scala.compat.version}
接尾辞としてを使用することをお勧めします。 たとえば、
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${scala.compat.version}</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
便宜上、すべての SDK BOM ファイルが ${scala.compat.version}
プロパティを宣言します。 このプロパティを使用するには、 SDK BOM がプロジェクトの親として追加されている必要があります。
-
HERE によって管理されているスキーマが更新され Scala 2.12
、以下をサポートします。
- HERE Map Content スキーマ
- SDII スキーマ
- Sensoris スキーマ(センサーセンサー温度)
- リアルタイムトラフィックスキーマ
- Weather スキーマ
- Optimized Map for Location Library
Scala 2.12
すべてのバインディング _2.12
にサフィックスが付きます。 上記のスキーマを使用するには、スキーマ artifactId
にスキーマ _2.12
を追加する必要があります。
Maven
または sbt
プロジェクトにスキーマを含める方法の詳細については、プラットフォームの「スキーマ」ページを参照してください。例については、「 Sensoris スキーマ」を参照してください。
-
プラットフォームで公開されている独自のスキーマは Scala 2.12
Scala 2.12
、スキーマプロジェクトにバインディングを追加することで、をサポートするように更新する必要があります。
使用するスキーマの移行の詳細について Scala 2.12
は、『スキーマ移行ガイド』を参照してください。
-
2.28
リリース以降、 HERE platform では 、Scala 2.12
の 2 つの追加のパイプライン環境をサポート しています。 Scala 2.12
プラットフォームでアプリケーションを実行するには、次の最新バージョンを使用します。
OLP CLI を使用する場合は、 olp pipeline template create
コマンドで <cluster type>
パラメータを変更する必要があります。
既知の問題
- アプリで
maven-shade-plugin
バージョン 3.1.0
またはそれよりも古いバージョンを使用している場合は、新しいバージョンにアップグレードすることをお勧めします。 アップグレードするには、 SDK BOM のバージョンを使用することをお勧めします。 - Spark の現在のデータセット API は
Java 8
、 lambdas またはのユーザーには使用できませ Scala 2.12
ん。 この場合は、 Spark Dataset .map()
メソッドを使用する Java 8
コードで、明示的な型キャストを MapFunction<>
に追加します。