Clojure ライブラリで Python コードを再利用する必要があります。Python スクリプトを .jar にバンドルしたいのですが、私が知る限り、Python はこれらのスクリプトに簡単にアクセスできないことを意味します。これらのスクリプトは jar ファイル内にパッケージ化されるためです。
部外者がアクセスできるように、.jar のリソースをファイル システムに直接配置する必要があることを指定する方法はありますか?
JAR標準に組み込まれている「auto-extract=true」機能はありません。独自のソリューションを展開する必要があります。
いくつかの異なるオプションがあります。
1)JARファイルは基本的にzipアーカイブです。したがって、部外者はJARをzipとして読み取ることでスクリプトにアクセスできます。unzip
ファイルからスクリプトを抽出するために使用するbashスクリプトをアプリケーションに同梱できます。
2)Mavenでは、Dependencyプラグインのdependency:unpackゴールを使用して、スクリプトをjarから抽出し、配布アセンブリ内のより適切な場所に配置できるようにすることができます。したがって、次のようなものを使用します(以下はテストされていません):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<id>unpack</id>
<phase>package</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.augustl</groupId>
<artifactId>scripts</artifactId>
<version>1.0.0</version>
<type>jar</type>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/scripts</outputDirectory>
<includes>**/*.py</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
3)アプリケーションでは、スクリプトをとして読み取り、InputStream
実行のために一時ファイルに書き込むことができます。スクリプトにかなり一意の名前が付いている限り、これを使用するのはかなり簡単です。Class.getResourceAsStream(String name)
参照: