OCIのFunctionを構築する調査をしていたのです。
Functionの理解はあったので、普通に構築する方法は知っていました。
しかし、Javaを選択して、ローカルのJarを使うようにする方法がわかりませんでした。
とは言っても、Function自体は、Docker内のMavenで構築されているようですので、普通にMavenにローカルJarを定義すれば良いかと思ってたのですが、その手の情報がググってもChatgptに聞いても出て来ませんでした。
というこで、解決したので、本邦初公開ですよ。
MavenにローカルJarを定義する方法は、以下です。Jarの置き場所と配置場所がキモになります。
pom.xml
<project >
<dependencies>
<dependency>
<groupId>hogehogejar</groupId>
<artifactId>hogehogejar</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/hogehoge.jar</systemPath>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.basedir}/target/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
まず、hogehoge.jarをdependencyに定義する時のローカルのパスなんですが、src/の下に配置するのが良いのです。
Functionのビルドは、Docker内で行われます。なのでローカルのソースとpom.xmlをDocker内にコピーします。
この手順は、fnコマンドで自動で行われるので介入する手立てがありません。
ということは、ソースをコピーする時にJarを運んでもらうしか手立てがありませんよね。
で、そのソースの在処が、src/以下となります。
Jarをsrc/hogehoge.jarに配置するとコピーし ビルドするのを確認出来ます。
次に配置場所ですが、pom.xmlに maven-dependency-plugin を定義することで Jarを配置してくれるのですが、上記のように、/target/ にすると良いのです。
こうすることで、実行時に、Jarパスとしてロードしてくれるようになり、問題無く Functionを実行可能というわけです。
Javaで、Functionを構築する時、別のプロジェクトからJarを借りてくるのに、ソース毎借りるのはちょっとねと思い、調査したのですが、なかなか情報が無くて自力でなんとかしました。
fn build する時に、Dockerfilexxx が作成されるので中身を見たら、動きがわかったのでこれを参考にしました。
Oracleの公式ドキュメントにも、載っけといてほしいですね。