はじめに
Oracle Cloud Infrastructure(以下OCI) の Java SDK の開発環境を整える手順を紹介します。毎回思い出しながら環境を構築しているので、備忘録として紹介です。
準備する開発環境は次のものです。
- Visual Studio Code (Remote Development)
- CentOS 7
- OpenJDK 11
- Maven
- OCI SDK (Java)
Visual Studio Code に、Maven を使って OCI SDK(Java) を使えるようにしていきます。
Vistual Studio Code (Remote Development)
Java Extension Pack を Install
OpenJDK 11
Visual Studio Code で Java を扱うときに、JDK 11 以上だと色々な機能が使えます
sudo yum install -y java-11-openjdk java-11-openjdk-devel java-11-openjdk-src
Maven 3.6.3 Install
依存関係を管理するために、Maven を Install します。
以下のURLでダウンロードURLを確認します。
https://maven.apache.org/download.cgi
ダウンロードページでコピーしたURLを使って、CentOS 上に tar.gz ファイルをダウンロードします
mkdir ~/maven
cd ~/maven
wget https://ftp.jaist.ac.jp/pub/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
次の手順に従ってインストールしていきます。
https://maven.apache.org/install.html
tar.gz ファイルを解凍
tar xfvz apache-maven-3.6.3-bin.tar.gz
環境変数設定
bashrc に追記
echo 'export PATH=$PATH:$HOME/maven/apache-maven-3.6.3/bin' >> ~/.bashrc
bashrc 再読み込み
source ~/.bashrc
mvn コマンドが実行可能確認します
[opc@maven maven]$ mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /home/opc/maven/apache-maven-3.6.3
Java version: 1.8.0_252, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "3.10.0-1127.8.2.el7.x86_64", arch: "amd64", family: "unix"
[opc@maven maven]$
Maven Directory
作業用ディレクトリを作成します。
mkdir -p ~/java
cd ~/java
Maven Project 作成 です。ociproject
という名前で作成します。
mvn archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-simple \
-DarchetypeVersion=1.4 \
-DgroupId=com.example \
-DartifactId=ociproject \
-Dversion=1.0-SNAPSHOT \
-Dpackage=com.example
Maven Project 作成後、pom.xml の編集をして、依存関係を設定します。
-
<version>1.25.4</version>
とあるように、最新の OCI SDK のバージョンを調べて入れると良い -
com.sun.activation
を入れないとエラー
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Maven Central Repository を参照して、必要な物を追加する
https://search.maven.org/search?q=g:com.oracle.oci.sdk
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-bom</artifactId>
<!-- replace the version below with your required version -->
<version>1.25.4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-audit</artifactId>
</dependency>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-core</artifactId>
</dependency>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-database</artifactId>
</dependency>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-identity</artifactId>
</dependency>
<dependency>
<groupId>com.sun.activation</groupId>
<artifactId>javax.activation</artifactId>
<version>1.2.0</version>
</dependency>
</dependencies>
Build Version の調整 (OCI SDK は 8 が必要)
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
参考 : pom.xml の全てを記載
<?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.example</groupId>
<artifactId>ociproject</artifactId>
<version>1.0-SNAPSHOT</version>
<name>ociproject</name>
<description>A simple ociproject.</description>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-bom</artifactId>
<!-- replace the version below with your required version -->
<version>1.25.4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-audit</artifactId>
</dependency>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-core</artifactId>
</dependency>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-database</artifactId>
</dependency>
<dependency>
<groupId>com.oracle.oci.sdk</groupId>
<artifactId>oci-java-sdk-identity</artifactId>
</dependency>
<dependency>
<groupId>com.sun.activation</groupId>
<artifactId>javax.activation</artifactId>
<version>1.2.0</version>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
<reporting>
<plugins>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
</plugin>
</plugins>
</reporting>
</project>
dependencies で指定した、ライブラリ群を download します。Maven Project 用の Directory のなかで、target/dependency にダウンロードされます。
cd ~/java/ociproject
mvn dependency:copy-dependencies
ダウンロードされた jar ファイル群の確認です。
[opc@vault01 ociproject]$ ls -la target/dependency/
total 19252
drwxrwxr-x. 2 opc opc 4096 Nov 15 14:11 .
drwxrwxr-x. 3 opc opc 24 Nov 15 14:11 ..
-rw-rw-r--. 1 opc opc 3482 Nov 15 14:11 animal-sniffer-annotations-1.14.jar
-rw-rw-r--. 1 opc opc 14768 Nov 15 14:11 aopalliance-repackaged-2.5.0-b42.jar
-rw-rw-r--. 1 opc opc 796532 Nov 15 14:11 bcpkix-jdk15on-1.60.jar
-rw-rw-r--. 1 opc opc 4189874 Nov 15 14:11 bcprov-jdk15on-1.60.jar
-rw-rw-r--. 1 opc opc 31547 Nov 15 14:11 checker-compat-qual-2.0.0.jar
-rw-rw-r--. 1 opc opc 284184 Nov 15 14:11 commons-codec-1.10.jar
-rw-rw-r--. 1 opc opc 208700 Nov 15 14:11 commons-io-2.5.jar
-rw-rw-r--. 1 opc opc 434678 Nov 15 14:11 commons-lang3-3.4.jar
-rw-rw-r--. 1 opc opc 13704 Nov 15 14:11 error_prone_annotations-2.1.3.jar
-rw-rw-r--. 1 opc opc 2590643 Nov 15 14:11 guava-25.0-android.jar
-rw-rw-r--. 1 opc opc 186763 Nov 15 14:11 hk2-api-2.5.0-b42.jar
-rw-rw-r--. 1 opc opc 189454 Nov 15 14:11 hk2-locator-2.5.0-b42.jar
-rw-rw-r--. 1 opc opc 135317 Nov 15 14:11 hk2-utils-2.5.0-b42.jar
-rw-rw-r--. 1 opc opc 8782 Nov 15 14:11 j2objc-annotations-1.1.jar
-rw-rw-r--. 1 opc opc 66894 Nov 15 14:11 jackson-annotations-2.9.8.jar
-rw-rw-r--. 1 opc opc 325619 Nov 15 14:11 jackson-core-2.9.8.jar
-rw-rw-r--. 1 opc opc 1347236 Nov 15 14:11 jackson-databind-2.9.8.jar
-rw-rw-r--. 1 opc opc 33391 Nov 15 14:11 jackson-datatype-jdk8-2.9.8.jar
-rw-rw-r--. 1 opc opc 100674 Nov 15 14:11 jackson-datatype-jsr310-2.9.8.jar
-rw-rw-r--. 1 opc opc 34610 Nov 15 14:11 jackson-module-jaxb-annotations-2.8.10.jar
-rw-rw-r--. 1 opc opc 737884 Nov 15 14:11 javassist-3.22.0-CR2.jar
-rw-rw-r--. 1 opc opc 26366 Nov 15 14:11 javax.annotation-api-1.2.jar
-rw-rw-r--. 1 opc opc 2497 Nov 15 14:11 javax.inject-1.jar
-rw-rw-r--. 1 opc opc 5951 Nov 15 14:11 javax.inject-2.5.0-b42.jar
-rw-rw-r--. 1 opc opc 127509 Nov 15 14:11 javax.ws.rs-api-2.1.jar
-rw-rw-r--. 1 opc opc 2254 Nov 15 14:11 jcip-annotations-1.0.jar
-rw-rw-r--. 1 opc opc 181563 Nov 15 14:11 jersey-client-2.27.jar
-rw-rw-r--. 1 opc opc 1140395 Nov 15 14:11 jersey-common-2.27.jar
-rw-rw-r--. 1 opc opc 69758 Nov 15 14:11 jersey-entity-filtering-2.27.jar
-rw-rw-r--. 1 opc opc 62547 Nov 15 14:11 jersey-hk2-2.27.jar
-rw-rw-r--. 1 opc opc 73055 Nov 15 14:11 jersey-media-json-jackson-2.27.jar
-rw-rw-r--. 1 opc opc 77882 Nov 15 14:11 json-smart-1.3.1.jar
-rw-rw-r--. 1 opc opc 19936 Nov 15 14:11 jsr305-3.0.2.jar
-rw-rw-r--. 1 opc opc 250436 Nov 15 14:11 nimbus-jose-jwt-4.9.jar
-rw-rw-r--. 1 opc opc 75337 Nov 15 14:11 oci-java-sdk-audit-1.5.2.jar
-rw-rw-r--. 1 opc opc 247871 Nov 15 14:11 oci-java-sdk-common-1.5.2.jar
-rw-rw-r--. 1 opc opc 4010670 Nov 15 14:11 oci-java-sdk-core-1.5.2.jar
-rw-rw-r--. 1 opc opc 1380390 Nov 15 14:11 oci-java-sdk-database-1.5.2.jar
-rw-rw-r--. 1 opc opc 20235 Nov 15 14:11 osgi-resource-locator-1.0.1.jar
-rw-rw-r--. 1 opc opc 41203 Nov 15 14:11 slf4j-api-1.7.25.jar
-rw-rw-r--. 1 opc opc 63777 Nov 15 14:11 validation-api-1.1.0.Final.jar
mvn install することで、Visual Studio Code からソースコードの Goto Definition が可能。
mvn install
log4j に関わる設定
OCI SDK では、log4j を使っています。log4j の設定をしないと Warning が出続けます。今回は、src ディレクトリの下に作ります。
mkdir $HOME/java/ociproject/src/main/resources
log4j.properties を作成
cat <<'EOF' >$HOME/java/ociproject/src/main/resources/log4j.properties
log4j.rootLogger=ERROR,stdout
log4j.logger.com.endeca=INFO
# Logger for crawl metrics
log4j.logger.com.endeca.eidi.web.metrics=INFO
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%p\t%d{ISO8601}\t%r\t%c\t[%t]\t%m%n
EOF
Sample Code
ここまでで 開発環境が整いました。SDK の動作確認のため、Sample Code を実行してみましょう。Compute Instance の一覧を表示して、標準出力に出す Sample Code です。
認証のため秘密鍵などを用意したくなかったので、Instance Principleを使っています。
https://qiita.com/sugimount/items/159852749851282a33e6
Sample Code
package com.example;
import com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider;
import com.oracle.bmc.core.ComputeClient;
import com.oracle.bmc.core.requests.ListInstancesRequest;
import com.oracle.bmc.core.responses.ListInstancesResponse;
/**
* Hello world!
*
*/
public class App {
public static void main(String[] args) {
System.out.println("Hello World!");
InstancePrincipalsAuthenticationDetailsProvider provider = InstancePrincipalsAuthenticationDetailsProvider
.builder().build();
ComputeClient computeClient = new ComputeClient(provider);
// ListInstancesRequest.builder().build();
ListInstancesRequest listInstancesRequest = ListInstancesRequest.builder()
.compartmentId("ocid1.tenancy.oc1..aaaaaaaahysodjbc46bsbxjwtu4hcxos6uxhhldgeeq5yvw4vrwsdz34sfta")
.build();
ListInstancesResponse response = computeClient.listInstances(listInstancesRequest);
// System.out.println(response);
computeClient.close();
}
}
実行例
[opc@java01 ociproject]$ cd /home/opc/java/ociproject ; /usr/lib/jvm/java-11-openjdk-11.0.9.11-0.0.1.el7_9.x86_64/bin/java -Dfile.encoding=UTF-8 @/tmp/cp_5zz9fok3mfupnsg33snsk49h.argfile com.example.App
Start!
bastion_onpremis
java01
private_machine01
vault01
vyos
End!
参考URL