Clojure 라이브러리에서 파이썬 코드를 재사용해야합니다. 나는 파이썬 스크립트를 내 .jar와 함께 묶고 싶지만, 내가 말할 수있는 한, 파이썬은이 스크립트들을 jar 파일 내부에 패키징되기 때문에 쉽게 접근 할 수 없다는 것을 의미한다.설치시 파일 시스템에 리소스를 추출해야합니다.
외부인이 파일 시스템에 .jar의 리소스를 직접 가져와 파일 시스템에 배치 할 수 있도록 지정하는 방법이 있습니까?
Clojure 라이브러리에서 파이썬 코드를 재사용해야합니다. 나는 파이썬 스크립트를 내 .jar와 함께 묶고 싶지만, 내가 말할 수있는 한, 파이썬은이 스크립트들을 jar 파일 내부에 패키징되기 때문에 쉽게 접근 할 수 없다는 것을 의미한다.설치시 파일 시스템에 리소스를 추출해야합니다.
외부인이 파일 시스템에 .jar의 리소스를 직접 가져와 파일 시스템에 배치 할 수 있도록 지정하는 방법이 있습니까?
JAR 표준에 내장 된 "자동 추출 = true"기능이 없습니다. 자신 만의 솔루션을 사용해야합니다.
1) JAR 파일은 기본적으로 아카이브를 압축됩니다
당신은 여러 가지 옵션이 있습니다. 따라서 외부인은 JAR을 zip으로 읽음으로써 스크립트에 액세스 할 수 있습니다. unzip
을 사용하여 파일에서 스크립트를 추출하는 응용 프로그램에 bash 스크립트를 제공 할 수 있습니다.
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
로 스크립트를 읽고 실행을위한 임시 파일에 기록 할 수 있습니다.
당신이 .jar 파일에 액세스하려면 어떻게 :만큼 스크립트가 상당히 고유 한 이름을 가지고,이 또한
Class.getResourceAsStream(String name)
참조를 사용하여 매우 솔직하다 하지만 그것은 단지 의존 일뿐입니다. 일반적으로 jar의 내용은 클래스 경로 및 클래스 로더를 통해 사용할 수 있지만 파일 자체를 가져 오는 것은 까다로울 수 있습니다. 또한 이것은 아마도 .jar 사용자가 수동으로 압축을 해제해야합니다. 매우 우아하지는 않습니다. –
"그냥 의존성이란?" Maven dependency plugin은 당신이 원할 때마다 당신이 의존하는 jar를 복사하고 압축을 풉니 다. http://maven.apache.org/plugins/maven-dependency-plugin/examples/unpacking-artifacts.html – noahlz