Aktualizace předchozí aplikace Java Service Fabric pro načtení knihoven Javy z Mavenu
Binární soubory Service Fabric Java se přesunuly ze sady Service Fabric Java SDK na hostování Mavenu. K načtení nejnovějších závislostí Service Fabric v Javě můžete použít mavencentral . Tato příručka vám pomůže aktualizovat existující aplikace Java vytvořené pro sadu Service Fabric Java SDK pomocí šablony Yeoman nebo Eclipse tak, aby byly kompatibilní s sestavením založeným na Mavenu.
Požadavky
Nejprve odinstalujte existující sadu Java SDK.
sudo dpkg -r servicefabricsdkjava
Pomocí kroků uvedených tady nainstalujte nejnovější rozhraní příkazového řádku Service Fabric.
Pokud chcete sestavovat a pracovat na aplikacích Service Fabric v Javě, ujistěte se, že máte nainstalované sady JDK 1.8 a Gradle. Pokud ještě nejsou instalované, můžete sadu JDK 1.8.(openjdk-1.8-jdk) a Gradle nainstalovat spuštěním následujícího kódu:
sudo apt-get install openjdk-8-jdk-headless sudo apt-get install gradle
Aktualizujte instalační/odinstalační skripty vaší aplikace, aby používaly nové rozhraní příkazového řádku Service Fabric, a to pomocí kroků uvedených tady. Pro srovnání si můžete prohlédnout naše úvodní příklady.
Tip
Po odinstalaci Service Fabric Java SDK nebude Yeoman fungovat. Pokud chcete zprovoznit generátor šablon Service Fabric Yeoman Java, postupujte v souladu s požadavky uvedenými tady.
Knihovny Service Fabric Java v Mavenu
Hostitelem knihoven Service Fabric Java je Maven. Můžete přidat závislosti do souborů pom.xml
nebo build.gradle
vašich projektů, aby se používaly knihovny Service Fabric Java z úložiště mavenCentral.
Objekty actor
Podpora Service Fabric Reliable Actor pro vaši aplikaci.
<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'
}
Služby
Podpora bezstavové služby Service Fabric pro vaši aplikaci.
<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'
}
Ostatní
Přeprava
Podpora přenosové vrstvy pro aplikace Service Fabric Java. Pokud neprogramujete na úrovni přenosové vrstvy, nemusíte tuto závislost do aplikace Reliable Actor nebo aplikace služby explicitně přidávat.
<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'
}
Podpora prostředků infrastruktury
Podpora na úrovni systému pro Service Fabric, která komunikuje s modulem runtime nativním pro Service Fabric. Tuto závislost nemusíte do aplikace Reliable Actor nebo aplikace služby explicitně přidávat. Načte se z Mavenu automaticky, jakmile zahrnete ostatní závislosti uvedené výše.
<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'
}
Migrace bezstavové služby Service Fabric
Pokud chcete mít možnost sestavovat stávající bezstavové služby Service Fabric v Javě s využitím závislostí Service Fabric načtených z Mavenu, je potřeba v rámci příslušné služby aktualizovat soubor build.gradle
. Dříve vypadal takto:
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')
}
}
Pokud chcete načíst závislosti z Mavenu, aktualizace build.gradle
by teď měla odpovídající části následujícím způsobem :
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('*')
}
}
Obecně platí, že k získání celkové představy o tom, jak bude vypadat skript sestavení pro bezstavovou službu Service Fabric v Javě, můžete využít libovolnou ukázku z našich úvodních příkladů. Tady je build.gradle pro ukázku EchoServer.
Migrace Service Fabric Actor Service
Pokud chcete mít možnost sestavovat stávající aplikaci Service Fabric Actor v Javě s využitím závislostí Service Fabric načtených z Mavenu, je potřeba v rámci balíčku rozhraní a balíčku příslušné služby aktualizovat soubor build.gradle
. Pokud máte balíček TestClient, musíte ho také aktualizovat. Takže pro objekt actor Myactor
, je potřeba aktualizovat tato místa:
./Myactor/build.gradle
./MyactorInterface/build.gradle
./MyactorTestClient/build.gradle
Aktualizace skriptu sestavení pro projekt rozhraní
Dříve vypadal takto:
dependencies {
compile fileTree(dir: '/opt/microsoft/sdk/servicefabric/java/packages/lib', include: ['*.jar'])
}
.
.
Pokud chcete načíst závislosti z Mavenu, aktualizace build.gradle
by teď měla odpovídající části následujícím způsobem :
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)
.
.
Aktualizace skriptu sestavení pro projekt objektu actor
Dříve vypadal takto:
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')
}
}
Pokud chcete načíst závislosti z Mavenu, aktualizace build.gradle
by teď měla odpovídající části následujícím způsobem :
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')
}
}
Aktualizace skriptu sestavení pro testovací klientský projekt
Změny jsou v tomto případě podobné změnám probraným v předchozí části, to znamená u projektu objektu actor. Dříve skript Gradle vypadal takto:
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')
}
}
Pokud chcete načíst závislosti z Mavenu, aktualizace build.gradle
by teď měla odpovídající části následujícím způsobem :
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')
}
}