1

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

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

4

1 回答 1

1

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)

也可以看看:

于 2012-09-16T15:03:46.313 回答