Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Liberty Dojo 2024 第3回「Liberty 開発ツール入門」

Liberty Dojo 2024 第3回「Liberty 開発ツール入門」

2024/7/2に実施されたIBM TechXchange Dojoのオンラインセミナーのセッション資料です。

https://ibm-developer.connpass.com/event/317467/

Takakiyo Tanaka

July 02, 2024
Tweet

More Decks by Takakiyo Tanaka

Other Decks in Technology

Transcript

  1. 2 ⾃⼰紹介 2 n ⽥中 孝清 n ⽇本アイ・ビー・エム株式会社 テクノロジー事業本部 Data

    AI and Automation 事業部 Application Modernization テクニカルセールス n WebSphere Application Serverなどの テクニカルセールスを20年以上担当 n Twitter(X) @TTakakiyo n https://www.linkedin.com/in/takakiyo/
  2. 4 再掲︓Java EEは「オペレーションのモダナイズ」が困難︖ n 「アプリケーション・サーバー」という実装が, 運⽤の⾃動化・効率化などのモダナイゼーションの阻害要因になっていた 4 開発環境 実働環境 コード作成

    App Server導⼊ 構成 ビルド デプロイ 実⾏ n Java EEでは,開発者がコードを作成し, それをビルドするだけでは実⾏できない n あらかじめテスト環境,本番環境に アプリケーション・サーバーを導⼊し 必要な構成を済ませ その環境にアプリをデプロイして はじめて実⾏することができた n サーバーのメンテナンスが, 運⽤の⼤きな負荷に
  3. 6 再掲︓実⾏環境の全てをコードで記述し,ビルドで作成 n LibertyはMaven Centralリポジトリーから ⾃動でダウンロードされ,実⾏環境を構築 n 構成およびビルドされたアプリを追加し ビルド環境でテスト実⾏が可能 n

    その環境を,まるごと導⼊可能ZIP (や実⾏可能JAR)にパッケージング可能 6 サーバー構成 導⼊可能 ZIP ランタイムの指定 ビルド・ツール 実⾏可能 JAR or アプリ 開発環境 実働環境 コード作成 ビルド ZIP展開 実⾏ コード作成 ビルド 実⾏ または 開発環境 実働環境
  4. 7 再掲︓Open Libertyのクイック・スターター 7 https://openliberty.io/start/ Mavenのプロジェクトを ダウンロードできる (64kBほどの⼩さなZIP) 展開してビルドしただけで, 完全に動作する

    Open Liberty環境ができあがる (数⾏書きかえれば製品版も) 以下のStarterでも⽣成可能 • Eclipse Starter for Jakarta EE https://start.jakarta.ee/ • MicroProfile Starter https://start.microprofile.io/
  5. 8 ダウンロードしたプロジェクトの構成 n Maven Wrapper – 最⼩限のmaven-wrapper.jarをつかい, セントラル・リポジトリからMaven本体をダウンロードして実⾏ – 開発環境にMavenが未導⼊でも開発が⾏える

    n Project構成ファイル – ビルドするプロジェクトの依存関係や利⽤するプラグインを定義 – Libertyプラグインの構成として利⽤するLibertyなども指定 n ソースディレクトリ – アプリケーションのソースコードや, Libertyの構成ファイルなどを保管 n Libertyの構成ファイル n ターゲットディレクトリ – ビルドを⾏うと⽣成される(mvn cleanで全て消える) – ビルドしたアプリケーションやLibertyの環境が⽣成される 8
  6. 10 Mavenで利⽤するゴールの例 n Mavenの標準のゴール – mvn compile – mvn test

    – mvn package – mvn install 等 n ビルドの各ステップは 「フェーズ」という段階に分かれている n 各フェーズの名称をゴールにすると 最初のフェーズ(validate)から 指定されたフェーズまでが 順に実⾏される n フェーズに対応しない特別なゴールもある – mvn clean 等 10
  7. 11 pom.xml︓プロジェクト構成ファイルの基本構造(1) n プロジェクト要素︓<project> – POMのバージョン︓<module> – プロジェクトの識別⼦ • グループ︓<groupId>

    • プロジェクトの識別⼦︓<artifactId> • バージョン︓<version> – 成果物の形式︓<packaging> – 各種プロパティ︓<properties> – 依存関係︓<dependencies> • プロジェクトが依存する対象を 記述する – ビルド構成︓<build> • ビルドの詳細について 特にコンパイルに使⽤する プラグインについて構成する (次ページ) 11 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.demo</groupId> <artifactId>maven-test</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>jakarta.platform</groupId> <artifactId>jakarta.jakartaee-api</artifactId> <version>8.0.0</version> <scope>provided</scope> </dependency> </dependencies> <build>
  8. 12 pom.xml︓依存関係 n 利⽤するJava EE/Jakarta EEやMicroProfile の APIについては,基本的にはStarterが 出⼒したものをそのまま使⽤すればOK n

    アプリケーションが使⽤する 外部ライブラリがあれば追加する – <scope>compile</scope>で追加する – アプリケーションのライブラリとして追加される n Libertyで構成するJDBC Driverなども 依存関係として追加する – <scope>provided</scope>で追加する – Liberty環境に組み込むようプラグインを構成する 12 <dependencies> <!-- Jakarta EEのAPI --> <dependency> <groupId>jakarta.platform</groupId> <artifactId>jakarta.jakartaee-api</artifactId> <version>8.0.0</version> <scope>provided</scope> </dependency> <!-- アプリケーションで使用する外部ライブラリ --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.14</version> <scope>compile</scope> </dependency> <!-- Libertyで使用するJDBC Driver --> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.5.4</version> <scope>provided</scope> </dependency> </dependencies>
  9. 13 pom.xml︓ビルド構成・プラグインの組み込み n ビルド構成︓<build> – 出⼒ファイル名︓<finalName> – プラグイン管理︓<pluginManagement> • ⼦プロジェクト含め,関連プロジェクト

    全体で有効なプラグインの構成 – プラグイン組み込み︓<plugins> • このプロジェクト⾃⾝に組み込むプラグイン n Libertyプラグインについての構成は, プラグイン管理<pluginManagement>に 構成されたlibery-maven-pluginの ⼦要素として構成していく 13 <build> <finalName>maven-test</finalName> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.1</version> </plugin> <plugin> <groupId>io.openliberty.tools</groupId> <artifactId>liberty-maven-plugin</artifactId> <version>3.3.4</version> <configuration> <runtimeArtifact> <groupId>io.openliberty</groupId> <artifactId>openliberty-kernel</artifactId> <version>24.0.0.6</version> </runtimeArtifact> <packageType>zip</packageType> <include>minify</include> </configuration> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <groupId>io.openliberty.tools</groupId> <artifactId>liberty-maven-plugin</artifactId> </plugin> </plugins> </build>
  10. 14 Libertyプラグインで利⽤可能になるゴールの例 n Liberty環境を構築するゴール(Libertyの環境構築もプラグインが⾃動で⾏う) – mvn liberty:create • Libertyランタイムをダウンロードし,targetディレクトリ下に導⼊して,サーバーに作成し構成を配置する –

    mvn liberty:install-feature • ⾜りないFeatureがあれば,追加導⼊する – mvn liberty:deploy • targetディレクトリ下のLibertyランタイムにビルドしたアプリケーションをデプロイする • サーバーが稼働中ならば,正常に更新されたことを確認する n serverコマンドのアクションと同等の操作をするゴール – mvn liberty:start • サーバーをバックグランドで起動し,アプリケーションを実⾏する – mvn liberty:stop • バックグランドで起動しているサーバーを停⽌する – mvn liberty:package • Libertyランタイム+構成+アプリケーションを含んだアーカイブファイルを作成する(デフォルトではZIPファイル) n Liberty Dev Mode(開発モード) – mvn liberty:dev 14
  11. 15 mvn liberty:create ゴール n サーバーが未導⼊であれば,liberty:install-serverが実⾏され, pom.xmlで指定されたLibertyランタイムをダウンロード,展開する – デフォルトの構築場所はtarget/libertyで,ここにwlpディレクトリが作成される n

    liberty:createゴールで,サーバー構成が作成され, src/main/liberty/configディレクトリ以下の 全てのファイル・ディレクトリが, 上記のLibertyの${server.config.dir}にコピーされる – src/main/liberty/configディレクトリに 必要なファイルを準備しておく • server.xmlは必須 • 環境変数を設定するserver.env • JVM起動引数を指定するjvm.options • 複数サーバーにまたがるセキュリティ機能を使⽤する場合は, 鍵ファイルもあらかじめ作成して配置しておく 15 ├── pom.xml ├── src │ ├── main │ │ ├── java │ │ │ └── jp │ │ │ └── test │ │ │ └── HelloServlet.java │ │ ├── liberty │ │ │ └── config │ │ │ ├── jvm.options │ │ │ └── server.xml │ │ └── webapp │ │ ├── WEB-INF │ │ │ └── web.xml │ │ └── index.html │ └── test │ └── java │ └── jp │ └── test │ ├── ApplicationTest.java │ └── it │ └── EndpointIT.java └── target └── liberty
  12. 16 Liberty Dev Mode n Mavenで「liberty:dev」をゴールに実⾏すると使⽤可能に n Mavenのcompileまでのゴールが実⾏されて,アプリケーションがビルドされる n 以下のLibertyプラグインのゴールが順に実⾏され,

    targetの下にLibertyの環境が作られる – liberty:install-server – liberty:create – liberty:install-feature – liberty:deploy n ホットデプロイが有効な状態でLibertyを起動し,アプリケーションのテストが可能に n コードが変更されると,⾃動的にcompile/liberty:deployが実⾏され, 実⾏中のアプリケーションも更新される n Ctrl-Cの⼊⼒で終了する – 他のコマンドを⼊⼒することで,テストや構成の再読み込みなども可能 16
  13. 17 Libertyプラグインの構成(1)︓ランタイムの指定 n Mavenセントラルレポジトリからダウンロードするランタイムの種類・バージョンを <configuration>の<runtimeArtifact>で指定する – Open Libertyを使⽤する場合は,以下を指定する Group ID:

    io.openliberty,Artifact ID: openliberty-kernel – WebSphere Liberty(ILAN版)を使⽤する場合は,以下を指定する Group ID: com.ibm.websphere.appserver.runtime,Artifact ID: wlp-kernel – バージョンは,末尾が3/6/9/12で,最新のものを使⽤することを推奨 n 上記のRuntimeはカーネルのみを含み, server.xmlに記述されたFeatureが, liberty:install-featureゴールで 動的に導⼊される – <skipInstallFeature>にtureを指定すると 最初の⼀回だけ導⼊されるようになる – 開発パフォーマンスを落とすことなく 最⼩限のサイズのランタイムが利⽤できる 17 <plugin> <groupId>io.openliberty.tools</groupId> <artifactId>liberty-maven-plugin</artifactId> <version>3.3.4</version> <configuration> <runtimeArtifact> <groupId>com.ibm.websphere.appserver.runtime</groupId> <artifactId>wlp-kernel</artifactId> <version>24.0.0.6</version> </runtimeArtifact> <skipInstallFeature>true</skipInstallFeature> </configuration> </plugin>
  14. 18 Libertyプラグインの構成(2)︓Libertyへのファイルの追加 n Libertyから<library>として参照するJARは, <dependency>でprofidedとして定義する n Libertyプラグインの<configuration>で <copyDependencies>を構成して ファイルをコピーする –

    コピー先の<location>は, ${server.config.dir}からの相対パス n server.xmlなどのLiberty構成ファイルで, <file>や<fileset>で指定して構成する 18 <configuration> <copyDependencies> <dependencyGroup> <location>jdbc/postgresql</location> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> </dependency> </dependencyGroup> </copyDependencies> <dependencies> <!-- Libertyで使用するJDBC Driver --> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.5.4</version> <scope>provided</scope> </dependency> <library id="postgresql_jar"> <fileset dir="${server.config.dir}/jdbc/postgresql" includes="*.jar" /> </library>
  15. 19 Libertyプラグインの構成(3)︓ライセンスの適⽤ n ランタイムとしてWebSphere Libertyを指定すると,ILAN版がダウンロードされる – 開発者⽤途であれば無償で利⽤できるランタイム – テスト環境,本番環境等でも使⽤するためには,ライセンスファイルの適⽤が必要 n

    PAサイトからダウンロードしたライセンスファイル(wlp-base-license.jarなど)を, 以下のようなmvnコマンドを実⾏して,適当なGroup/Artifact/Versionで導⼊しておく n <licenseArtifact>で指定すると, Liberty環境作成時に ⾃動的にライセンスの適⽤が⾏われる 19 <plugin> <groupId>io.openliberty.tools</groupId> <artifactId>liberty-maven-plugin</artifactId> <version>3.3.4</version> <configuration> <runtimeArtifact> <groupId>com.ibm.websphere.appserver.runtime</groupId> <artifactId>wlp-kernel</artifactId> <version>24.0.0.6</version> </runtimeArtifact> <skipInstallFeature>true</skipInstallFeature> <licenseArtifact> <groupId>com.ibm.websphere.liberty</groupId> <artifactId>wlp-base-license</artifactId> <version>18.0.0.1</version> </licenseArtifact> </configuration> </plugin> % mvn install:install-file ¥ -Dfile=wlp-base-license.jar ¥ -DgroupId=com.ibm.websphere.liberty ¥ -DartivactId=wlp-base-license ¥ -Dversion=18.0.0.1 [INFO] CWWKM2181I: Installing Liberty production license com.ibm.websphere.liberty:wlp-base-license:18.0.0.1. [INFO] IBM WebSphere Application Server を使用、抽出、またはインストールする前に、IBM プログラムのご使用条件 [INFO] の条項と追加のライセンス情報に同意する必要があります。 以下の使用条件をよくお読みください。 [INFO] [INFO] [INFO] --acceptLicense 引数が見つかりました。 これは、ご使用条件の条項に同意されたことを示します。 [INFO] [INFO] [INFO] ライセンス・ファイルが正常に適用されました。
  16. 20 Libertyプラグインの構成(4)︓パッケージのため構成 n 導⼊可能なパッケージを作成する liberty:packageゴールを実⾏する前には, liberty:create,liberty:install-feature, liberty:deployゴールを 実⾏しておくことが必須 n 標準のpackageのフェーズで

    上記のLibertyのゴールが実⾏されるように <executions>を構成しておくと便利 – 「mvn package」で,導⼊可能な Libertyのパッケージが作成される n <packageType>にzipを, <include>にminifyを指定しておく – 直接実⾏可能なパッケージを作成するには, <packageType>にjarを, <include>にminify,runnableを指定する 20 <plugin> <groupId>io.openliberty.tools</groupId> <artifactId>liberty-maven-plugin</artifactId> <version>3.3.4</version> <configuration> <runtimeArtifact> <groupId>com.ibm.websphere.appserver.runtime</groupId> <artifactId>wlp-kernel</artifactId> <version>24.0.0.6</version> </runtimeArtifact> <skipInstallFeature>true</skipInstallFeature> <!-- アーカイブはZIP形式で最小化して作成 --> <packageType>zip</packageType> <include>minify</include> </configuration> <executions> <!-- packageフェーズでLibertyの作成やパッケージも実行 --> <execution> <id>package-server</id> <phase>package</phase> <goals> <goal>create</goal> <goal>install-feature</goal> <goal>deploy</goal> <goal>package</goal> </goals> </execution> </executions> </plugin>
  17. 21 Libertyプラグインの構成(5)︓extensionとして組み込み n <extensions>にtrueを設定すると, extensionとして組み込まれ, 標準のフェーズやゴールが拡張される n <packaging>に指定する成果物の形式として liberty-assemblyが使⽤可能になる n

    標準のフェーズにlibertyのゴールが⾃動的に組み込まれ 「mvn package」で,導⼊可能なパッケージが作成できるようになる 21 <plugin> <groupId>io.openliberty.tools</groupId> <artifactId>liberty-maven-plugin</artifactId> <version>3.3.4</version> <extensions>true</extensions> <configuration> <packageType>zip</packageType> <include>minify</include> </configuration> </plugin> <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.demo</groupId> <artifactId>maven-test</artifactId> <version>1.0-SNAPSHOT</version> <packaging>liberty-assembly</packaging>
  18. 22 導⼊可能なパッケージの作成 n 前⾴までのLibertyプラグインの構成(4)か(5)をおこなうと, 「mvn package」で,targetディレクトリ以下に Libertyの実⾏環境も含んだ,導⼊可能なアーカイブ・パッケージが作成される n <packageType>がzipの場合 –

    <include>でminifyを指定︓最⼩限のサイズに限定したLibertyの実⾏環境と,構成・アプリケーション – <include>でusrを指定︓構成とアプリケーションのみがZIPに含まれる n <packageType>がjarの場合 – <include>でminifyを指定︓⾃⼰展開コードを組み込んだ,Libertyの実⾏環境と構成・アプリケーション • java -jarで実⾏すると,指定されたディレクトリにLiberty環境を展開 – <include>でminify,runnableを指定︓直接実⾏可能なLibertyのJARファイル • java -jarで実⾏すると,テンポラリディレクトリに展開の上,Libertyを実⾏ 22
  19. 25 ⼆つのIDE拡張 Liberty Developer Tools • Libertyの提供当初から 存在している拡張 • 多機能

    • 現在は新規機能開発は停⽌ Liberty Tools • 2023年に正式版になった 新しい拡張 • まだ機能は少ない • 現在も更新が続いている Eclipse ◦ ◦ Visual Studio Code ◦ IntelliJ IDEA ◦ Maven / Gradle 基本的には利⽤せず ビルドに利⽤ Dev Modeとの連携 ◦ デバッガとの連携 ◦ ◦ server.xmlの構⽂チェック ◦ ◦ server.xmlのGUIによる編集 ◦ 商⽤サポート ◦
  20. 26 拡張機能の使い分け n Eclipseを使⽤して開発する場合は,Liberty Developer Toolsが現時点ではお薦め – Eclipse IDEのバージョンと,Liberty Developer

    Toolsのバージョンの組み合わせに制限があるので, サポートページで組み合わせを確認してから両者をダウンロードする • https://www.ibm.com/support/pages/node/6589483 • サポートページよりも新しいEclipseを使⽤すると,正常に稼働しないこともあるので注意 – Mavenプロジェクトの使⽤は必須ではない • Libertyプラグインを組み込んだMavenを使⽤しない場合は, Liberty環境はEclipse/Liberty Developer Toolsを操作して⼿動で作成する • Libertyプラグインを組み込んだMavenを使⽤して,Liberty環境を⾃動作成することも可能 n VS Code / IntelliJを使⽤して開発する場合は,Liberty Toolsを使⽤する – Java 21対応などもLiberty Toolsの⽅が早いので, 最新のJava機能を利⽤したい場合なども,Liberty Toolsの使⽤がお勧め – Liberty Toolsでは,Libertyプラグインを組み込んだMavenの使⽤が必須 • Open Liberty Starterなどで,Mavenプロジェクトを⽣成してから利⽤する
  21. 27 Liberty Developer Tools for Eclipseの利⽤⽅法 n コミュニティ上のガイドを参照ください 1. コミュニティ(

    https://ibm.biz/JapanWebSphereUG )にアクセス 2. 「WebSphere Application Server Liberty技術⽂章⼀覧」をクリック 3. 「WebSphere Liberty 開発ツール利⽤ガイド」をクリック 27
  22. 28 Visual Studio CodeへのLiberty Toolsの導⼊ n 前提 – (Libertyで利⽤可能なバージョンの)JDKが導⼊されていること –

    Visual Studio Codeを導⼊し,Extension Pack for JavaなどのJava開発拡張が追加されていること n 導⼊⽅法 – 画⾯左のアクティビティ・バーから「拡張機能」をえらび,「liberty」などで検索してLiberty Toolsを表⽰ – 「インストール」ボタンで導⼊ 28
  23. 30 Liberty Dashboard n Liberty Toolsが導⼊されていると,エクスプローラーのなかに 「LIBERTY DASHBOARD」が追加される n プロジェクト名を右クリックすると,Libertyの起動や停⽌などが⾏える

    – 通常は「Start」で起動して,アプリケーションをテスト 「Stop」で停⽌する – 実⾏中のLibertyに,「Attach debugger」で デバッガを接続し,ステップ実⾏なども可能 30
  24. 34 Integration&WebSphereコミュニティ 34 https://ibm.biz/JapanWebSphereUG ↓Integration Group Japan↓ n 多数の⽇本語技術⽂書を掲載 n

    各種イベント・セミナーのご案内 n IBM IDでLoginすれば質問投稿や限定記事の閲覧が可能 n オープンソースや幅広いテクノロジーに関する話題も