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の公式ドキュメントにも、載っけといてほしいですね。





