2012-09-15 2 views
1

Clojure 라이브러리에서 파이썬 코드를 재사용해야합니다. 나는 파이썬 스크립트를 내 .jar와 함께 묶고 싶지만, 내가 말할 수있는 한, 파이썬은이 스크립트들을 jar 파일 내부에 패키징되기 때문에 쉽게 접근 할 수 없다는 것을 의미한다.설치시 파일 시스템에 리소스를 추출해야합니다.

외부인이 파일 시스템에 .jar의 리소스를 직접 가져와 파일 시스템에 배치 할 수 있도록 지정하는 방법이 있습니까?

답변

1

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로 스크립트를 읽고 실행을위한 임시 파일에 기록 할 수 있습니다.

+0

당신이 .jar 파일에 액세스하려면 어떻게 :만큼 스크립트가 상당히 고유 한 이름을 가지고,이 또한 Class.getResourceAsStream(String name)

참조를 사용하여 매우 솔직하다 하지만 그것은 단지 의존 일뿐입니다. 일반적으로 jar의 내용은 클래스 경로 및 클래스 로더를 통해 사용할 수 있지만 파일 자체를 가져 오는 것은 까다로울 수 있습니다. 또한 이것은 아마도 .jar 사용자가 수동으로 압축을 해제해야합니다. 매우 우아하지는 않습니다. –

+0

"그냥 의존성이란?" Maven dependency plugin은 당신이 원할 때마다 당신이 의존하는 jar를 복사하고 압축을 풉니 다. http://maven.apache.org/plugins/maven-dependency-plugin/examples/unpacking-artifacts.html – noahlz

관련 문제