我需要在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