2012-09-15 64 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