【问题标题】:Have maven/leiningen extract resources to file system upon install在安装时让 maven/leiningen 将资源提取到文件系统
【发布时间】:2012-09-15 23:26:17
【问题描述】:

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

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

【问题讨论】:

    标签: maven clojure leiningen


    【解决方案1】:

    JAR 标准中没有内置“auto-extract = true”功能。您必须推出自己的解决方案。

    您有几种不同的选择:

    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 包。 maven.apache.org/plugins/maven-dependency-plugin/examples/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多