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

 

 

 

Joomla templates by a4joomla