Help us understand the problem. What is going on with this article?

[Oracle Cloud] OCI Java SDK の開発環境を作る (Visual Studio Code, Maven, CentOS)

はじめに

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

1605448558140.png

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

1587385604751.png

ダウンロードページでコピーした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 の編集をして、依存関係を設定します。

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

https://docs.cloud.oracle.com/ja-jp/iaas/Content/API/SDKDocs/javasdkgettingstarted.htm

sugimount
CloudNativeな色々をやっています / 投稿している内容は個人的な見解なので、所属組織とは関係ありません https://twitter.com/sugimount
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away