我需要在Clojure库中重用一些python代码。我想将python脚本与我的.jar捆绑在一起,但据我所知,这意味着python将无法轻松访问这些脚本,因为它们将被打包到jar文件中。将maven/leiningen提取资源安装到文件系统
有没有办法指定.jar的资源必须直接放置在文件系统中,以便外人可以到达它们?
我需要在Clojure库中重用一些python代码。我想将python脚本与我的.jar捆绑在一起,但据我所知,这意味着python将无法轻松访问这些脚本,因为它们将被打包到jar文件中。将maven/leiningen提取资源安装到文件系统
有没有办法指定.jar的资源必须直接放置在文件系统中,以便外人可以到达它们?
JAR标准中没有内置的“自动提取=真”功能。你将不得不推出自己的解决方案。
您有几种不同的选择:
1)JAR文件基本上是zip档案。所以,外人可以通过阅读JAR作为zip来访问脚本。您可以发布一个bash脚本,使用您的应用程序使用unzip
从您的文件中提取脚本。
2)在Maven中,您可以通过Dependency plugin's 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)
也见相当直接:
如何访问.jar文件当它只是一个依赖关系?通常,jar的内容通过类路径和类加载器可用,但是获取文件本身可能会很棘手。此外,这可能需要.jar的用户以某种方式手动解压缩,这不是很优雅。 –
你是什么意思“只是依赖?” Maven依赖项插件将复制和解压任何你想要的任何jar文件。 http://maven.apache.org/plugins/maven-dependency-plugin/examples/unpacking-artifacts.html – noahlz