2012-09-15 34 views
1

我需要在Clojure库中重用一些python代码。我想将python脚本与我的.jar捆绑在一起,但据我所知,这意味着python将无法轻松访问这些脚本,因为它们将被打包到jar文件中。将maven/leiningen提取资源安装到文件系统

有没有办法指定.jar的资源必须直接放置在文件系统中,以便外人可以到达它们?

回答

1

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)

也见相当直接:

+0

如何访问.jar文件当它只是一个依赖关系?通常,jar的内容通过类路径和类加载器可用,但是获取文件本身可能会很棘手。此外,这可能需要.jar的用户以某种方式手动解压缩,这不是很优雅。 –

+0

你是什么意思“只是依赖?” Maven依赖项插件将复制和解压任何你想要的任何jar文件。 http://maven.apache.org/plugins/maven-dependency-plugin/examples/unpacking-artifacts.html – noahlz