Perbarui aplikasi Java Service Fabric Anda untuk mengambil pustaka Java dari Maven
Biner Service Fabric Java telah dipindahkan dari Service Fabric Java SDK ke hosting Maven. Anda dapat menggunakan mavencentral untuk mengambil dependensi Service Fabric Java terbaru. Panduan ini akan membantu Anda memperbarui aplikasi Java yang ada yang dibuat untuk Service Fabric Java SDK menggunakan template Yeoman atau Eclipse agar kompatibel dengan build berbasis Maven.
Prasyarat
Pertama, hapus instalan Java SDK yang ada.
sudo dpkg -r servicefabricsdkjava
Instal Service Fabric CLI terbaru dengan mengikuti langkah-langkah yang disebutkan di sini.
Untuk membuat dan mengerjakan aplikasi Service Fabric Java, pastikan Anda telah menginstal JDK 1.8 dan Gradle. Jika belum menginstal, Anda dapat menjalankan perintah berikut untuk menginstal JDK 1.8 (openjdk-8-jdk) dan Gradle -
sudo apt-get install openjdk-8-jdk-headless sudo apt-get install gradle
Perbarui skrip instal/uninstal aplikasi Anda untuk menggunakan Service Fabric CLI baru dengan mengikuti langkah-langkah yang disebutkan di sini. Anda dapat merujuk ke contoh persiapan kami untuk referensi.
Tip
Setelah menghapus Service Fabric Java SDK, Yeoman tidak akan berfungsi. Ikuti Prasyarat yang disebutkan di sini untuk mengaktifkan dan menjalankan generator template Service Fabric Yeoman.
Pustaka Service Fabric Java pada Maven
Pustaka Service Fabric Java telah dihosting di Maven. Anda dapat menambahkan dependensi di pom.xml
atau build.gradle
proyek Anda untuk menggunakan pustaka Service Fabric Java dari mavenCentral.
Aktor
Dukungan Service Fabric Reliable Actor untuk aplikasi Anda.
<dependency>
<groupId>com.microsoft.servicefabric</groupId>
<artifactId>sf-actors</artifactId>
<version>1.0.0</version>
</dependency>
repositories {
mavenCentral()
}
dependencies {
compile 'com.microsoft.servicefabric:sf-actors:1.0.0'
}
Layanan
Dukungan Service Fabric Stateless Service untuk aplikasi Anda.
<dependency>
<groupId>com.microsoft.servicefabric</groupId>
<artifactId>sf-services</artifactId>
<version>1.0.0</version>
</dependency>
repositories {
mavenCentral()
}
dependencies {
compile 'com.microsoft.servicefabric:sf-services:1.0.0'
}
Lainnya
Transportasi
Dukungan transport layer untuk aplikasi Service Fabric Java Anda tidak perlu menambahkan dependensi ini secara eksplisit ke aplikasi Reliable Actor atau Service Anda, kecuali jika Anda memprogram di lapisan transportasi.
<dependency>
<groupId>com.microsoft.servicefabric</groupId>
<artifactId>sf-transport</artifactId>
<version>1.0.0</version>
</dependency>
repositories {
mavenCentral()
}
dependencies {
compile 'com.microsoft.servicefabric:sf-transport:1.0.0'
}
Dukungan fabric
Dukungan tingkat sistem untuk Service Fabric, yang berbicara dengan runtime Service Fabric asli. Anda tidak perlu menambahkan dependensi ini secara eksplisit ke aplikasi Reliable Actor atau Service Anda. Depedensi ini diambil secara otomatis dari Maven, saat Anda menyertakan dependensi lain di atas.
<dependency>
<groupId>com.microsoft.servicefabric</groupId>
<artifactId>sf</artifactId>
<version>1.0.0</version>
</dependency>
repositories {
mavenCentral()
}
dependencies {
compile 'com.microsoft.servicefabric:sf:1.0.0'
}
Migrating Service Fabric Stateless Service
Untuk dapat membangun layanan Java stateless Service Fabric yang menggunakan dependensi Service Fabric yang diambil dari Maven, Anda perlu memperbarui file build.gradle
di dalam Layanan. Sebelumnya layanan ini seperti berikut -
dependencies {
compile fileTree(dir: '/opt/microsoft/sdk/servicefabric/java/packages/lib', include: ['*.jar'])
compile project(':Interface')
}
.
.
.
jar {
manifest {
attributes(
'Main-Class': 'statelessservice.MyStatelessServiceHost',
"Class-Path": configurations.compile.collect { 'lib/' + it.getName() }.join(' '))
baseName "MyStateless"
destinationDir = file('./../MyStatelessApplication/MyStatelessPkg/Code')
}
.
.
.
task copyDeps <<{
copy {
from("/opt/microsoft/sdk/servicefabric/java/packages/lib")
into("./../MyStatelessApplication/MyStatelessPkg/Code/lib")
include('*.jar')
}
copy {
from("/opt/microsoft/sdk/servicefabric/java/packages/lib")
into("./../MyStatelessApplication/MyStatelessPkg/Code/lib")
include('libj*.so')
}
}
Sekarang, untuk mengambil dependensi dari Maven, bagian yang diperbarui build.gradle
akan memiliki bagian yang sesuai sebagai berikut -
repositories {
mavenCentral()
}
configurations {
azuresf
}
dependencies {
compile project(':Interface')
azuresf ('com.microsoft.servicefabric:sf-services:1.0.0')
compile fileTree(dir: 'lib', include: '*.jar')
}
task explodeDeps(type: Copy, dependsOn:configurations.azuresf) { task ->
configurations.azuresf.filter { it.toString().contains("native") }.each{
from zipTree(it)
}
configurations.azuresf.filter { !it.toString().contains("native") }.each {
from it
}
into "lib"
include "libj*.so", "*.jar"
}
compileJava.dependsOn(explodeDeps)
.
.
.
jar {
manifest {
def mpath = configurations.compile.collect {'lib/'+it.getName()}.join (' ')
mpath = mpath + ' ' + configurations.azuresf.collect {'lib/'+it.getName()}.join (' ')
attributes(
'Main-Class': 'statelessservice.MyStatelessServiceHost',
"Class-Path": mpath)
baseName "MyStateless"
destinationDir = file('./../MyStatelessApplication/MyStatelessPkg/Code')
}
}
.
.
.
task copyDeps <<{
copy {
from("lib/")
into("./../MyStatelessApplication/MyStatelessPkg/Code/lib")
include('*')
}
}
Secara umum, untuk mendapatkan gambaran keseluruhan tentang bagaimana skrip build akan terlihat untuk layanan stateless Java Service Fabric, Anda dapat merujuk ke contoh yang tercantum pada yang sudah kami persiapkan. Berikut adalah build.gradle untuk contoh EchoServer.
Migrasikan Layanan Fabric Actor Service
Untuk dapat membangun aplikasi Java Service Fabric Actor menggunakan dependensi Service Fabric yang diambil dari Maven, Anda perlu memperbarui file build.gradle
di dalam paket antarmuka dan dalam paket Service. Jika Anda memiliki paket TestClient, Anda perlu memperbaruinya juga. Jadi, untuk aktor Anda Myactor
, berikut ini tempat yang perlu Anda perbarui -
./Myactor/build.gradle
./MyactorInterface/build.gradle
./MyactorTestClient/build.gradle
Memperbarui skrip build untuk proyek antarmuka
Sebelumnya layanan ini seperti berikut -
dependencies {
compile fileTree(dir: '/opt/microsoft/sdk/servicefabric/java/packages/lib', include: ['*.jar'])
}
.
.
Sekarang, untuk mengambil dependensi dari Maven, bagian yang diperbarui build.gradle
akan memiliki bagian yang sesuai sebagai berikut -
repositories {
mavenCentral()
}
configurations {
azuresf
}
dependencies {
azuresf ('com.microsoft.servicefabric:sf-actors:1.0.0')
compile fileTree(dir: 'lib', include: '*.jar')
}
task explodeDeps(type: Copy, dependsOn:configurations.azuresf) { task ->
configurations.azuresf.filter { it.toString().contains("native") }.each{
from zipTree(it)
}
configurations.azuresf.filter { !it.toString().contains("native") }.each {
from it
}
into "lib"
include "libj*.so", "*.jar"
}
compileJava.dependsOn(explodeDeps)
.
.
Memperbarui skrip build untuk proyek aktor
Sebelumnya layanan ini seperti berikut -
dependencies {
compile fileTree(dir: '/opt/microsoft/sdk/servicefabric/java/packages/lib', include: ['*.jar'])
compile project(':MyactorInterface')
}
.
.
.
jar {
manifest {
attributes(
'Main-Class': 'reliableactor.MyactorHost',
"Class-Path": configurations.compile.collect { 'lib/' + it.getName() }.join(' '))
baseName "myactor"
destinationDir = file('./../myjavaapp/MyactorPkg/Code')
}
}
.
.
.
task copyDeps<< {
copy {
from("/opt/microsoft/sdk/servicefabric/java/packages/lib")
into("./../myjavaapp/MyactorPkg/Code/lib")
include('*.jar')
}
copy {
from("/opt/microsoft/sdk/servicefabric/java/packages/lib")
into("./../myjavaapp/MyactorPkg/Code/lib")
include('libj*.so')
}
copy {
from("../MyactorInterface/out/lib")
into("./../myjavaapp/MyactorPkg/Code/lib")
include('*.jar')
}
}
Sekarang, untuk mengambil dependensi dari Maven, bagian yang diperbarui build.gradle
akan memiliki bagian yang sesuai sebagai berikut -
repositories {
mavenCentral()
}
configurations {
azuresf
}
dependencies {
compile project(':MyactorInterface')
azuresf ('com.microsoft.servicefabric:sf-actors:1.0.0')
compile fileTree(dir: 'lib', include: '*.jar')
}
task explodeDeps(type: Copy, dependsOn:configurations.azuresf) { task ->
configurations.azuresf.filter { it.toString().contains("native") }.each{
from zipTree(it)
}
configurations.azuresf.filter { !it.toString().contains("native") }.each {
from it
}
into "lib"
include "libj*.so", "*.jar"
}
compileJava.dependsOn(explodeDeps)
.
.
.
jar {
manifest {
def mpath = configurations.compile.collect {'lib/'+it.getName()}.join (' ')
mpath = mpath + ' ' + configurations.azuresf.collect {'lib/'+it.getName()}.join (' ')
attributes(
'Main-Class': 'reliableactor.MyactorHost',
"Class-Path": mpath)
baseName "myactor"
destinationDir = file('../myjavaapp/MyactorPkg/Code')}
}
.
.
.
task copyDeps<< {
copy {
from("lib/")
into("../myjavaapp/MyactorPkg/Code/lib")
include('*')
}
copy {
from("../MyactorInterface/out/lib")
into("../myjavaapp/MyactorPkg/Code/lib")
include('*.jar')
}
}
Memperbarui skrip build untuk proyek klien pengujian
Perubahan di sini mirip dengan perubahan yang dibahas pada bagian sebelumnya, yaitu proyek aktor. Sebelumnya, skrip Gradle terlihat seperti berikut -
dependencies {
compile fileTree(dir: '/opt/microsoft/sdk/servicefabric/java/packages/lib', include: ['*.jar'])
compile project(':MyactorInterface')
}
.
.
.
jar
{
manifest {
attributes(
'Main-Class': 'reliableactor.test.MyactorTestClient',
"Class-Path": configurations.compile.collect { 'lib/' + it.getName() }.join(' '))
}
baseName "myactor-test"
destinationDir = file('out/lib')
}
.
.
.
task copyDeps<< {
copy {
from("/opt/microsoft/sdk/servicefabric/java/packages/lib")
into("./out/lib/lib")
include('*.jar')
}
copy {
from("/opt/microsoft/sdk/servicefabric/java/packages/lib")
into("./out/lib/lib")
include('libj*.so')
}
copy {
from("../MyactorInterface/out/lib")
into("./out/lib/lib")
include('*.jar')
}
}
Sekarang, untuk mengambil dependensi dari Maven, bagian yang diperbarui build.gradle
akan memiliki bagian yang sesuai sebagai berikut -
repositories {
mavenCentral()
}
configurations {
azuresf
}
dependencies {
compile project(':MyactorInterface')
azuresf ('com.microsoft.servicefabric:sf-actors:1.0.0')
compile fileTree(dir: 'lib', include: '*.jar')
}
task explodeDeps(type: Copy, dependsOn:configurations.azuresf) { task ->
configurations.azuresf.filter { it.toString().contains("native") }.each{
from zipTree(it)
}
configurations.azuresf.filter { !it.toString().contains("native") }.each {
from it
}
into "lib"
include "libj*.so", "*.jar"
}
compileJava.dependsOn(explodeDeps)
.
.
.
jar
{
manifest {
def mpath = configurations.compile.collect {'lib/'+it.getName()}.join (' ')
mpath = mpath + ' ' + configurations.azuresf.collect {'lib/'+it.getName()}.join (' ')
attributes(
'Main-Class': 'reliableactor.test.MyactorTestClient',
"Class-Path": mpath)
baseName "myactor-test"
destinationDir = file('./out/lib')
}
}
.
.
.
task copyDeps<< {
copy {
from("lib/")
into("./out/lib/lib")
include('*')
}
copy {
from("../MyactorInterface/out/lib")
into("./out/lib/lib")
include('*.jar')
}
}