Bagikan melalui


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

  1. Pertama, hapus instalan Java SDK yang ada.

    sudo dpkg -r servicefabricsdkjava
    
  2. Instal Service Fabric CLI terbaru dengan mengikuti langkah-langkah yang disebutkan di sini.

  3. 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
    
  4. 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')
        }
}

Langkah berikutnya