我需要在 Clojure 库中重用一些 python 代码。我想将 python 脚本与我的 .jar 捆绑在一起,但据我所知,这意味着 python 将无法轻松访问这些脚本,因为它们将被打包在 jar 文件中。
有没有办法指定 .jar 的资源必须直接放在文件系统中,以便外人可以访问它们?
JAR 标准中没有内置“auto-extract = true”功能。您必须推出自己的解决方案。
您有几种不同的选择:
1) JAR 文件基本上是 zip 档案。因此,外人可以通过将 JAR 作为 zip 读取来访问脚本。您可以在您的应用程序中附带一个 bash 脚本,用于unzip
从文件中提取脚本。
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) 在您的应用程序中,您可以将脚本读取为 anInputStream
并将其写入临时文件以执行。只要您的脚本有一个相当独特的名称,这就是相当直接的使用Class.getResourceAsStream(String name)
也可以看看: