2013-03-13 2 views
1

우리는 java webstart를 사용하여 인쇄 응용 프로그램을 개발하려고합니다. 우리는 eclipse를 사용하여 jar 파일을 일반적인 jar 파일로 생성했습니다. 우리의 응용 프로그램은 데이터베이스에 연결하여 데이터를 바이트 등으로 변환하는 데 필요한 외부 라이브러리가 필요합니다.java webstart 프로젝트에 jar 종속성을 포함하는 방법

jre 폴더의/ext/디렉토리에 필요한 jar 파일을 넣기 전에이 작업을 수행 할 수있었습니다. 그러나 이로 인해 Tomcat 서버와 라이브러리가 충돌하기 때문에이 접근법을 피하고자합니다.

또한 필요한 라이브러리가 이미 jar 파일로 패키지되어 있으므로 runnable jar로 프로젝트를 내보내려고했습니다. 그러나 응용 프로그램을 실행하려고하면 항아리 내에서 라이브러리를 볼 수없는 것 같습니다.

jar 파일과 함께 필요한 라이브러리를 jar 파일과 함께 폴더에 배치하고 하나씩 참조 할 수 있다는 것도 알고 있습니다. 그러나 우리는 많은 외부 항아리가 있고 하나씩 가져 오기를 원하지 않기 때문에이 방법을 피하고 싶습니다. :)

제 질문은 어떻게 java webstart jar를 적절하게 패키지합니까? 다른 방법이 있습니까? 가장 좋은 방법은 무엇입니까?

우리의 jnlp 파일은 아래를 참조하십시오

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<jnlp codebase="http://192.168.1.169/webstart/" href="launch.jnlp" spec="1.0+"> 
    <information> 
     <title>PrinterWebStart</title> 
     <vendor>robert</vendor> 
     <homepage href=""/> 
     <description>PrinterWebStart</description> 
     <description kind="short">PrinterWebStart</description> 
    </information> 
    <update check="always"/> 
    <security> 
<all-permissions/> 
</security> 
    <resources> 
     <j2se version="1.5+"/> 
     <jar href="printer-base.jar" main="true"/> 
    </resources> 
    <application-desc main-class="com.ccti.printer.task.PrinterTaskPanel"> 
    </application-desc> 
</jnlp> 
+1

* "그러나 우리는 많은 외부 항아리가 있으므로 이러한 접근법을 피하고자 하나씩 가져오고 싶지는 않습니다."* 단순히 가장 좋은 접근 방법입니다. E.G. 그것은 응용 프로그램의 게으른 다운로드를 지원합니다. 구성 요소 및 잠재적으로 작은 바이트 단위의 구성 요소 업데이트가 포함됩니다. 왜 다른 방식으로하고 싶습니까? –

+0

안녕하세요. 필요한 외부 라이브러리가 항아리에 포장되어 있다면 더 좋을 것이라고 생각했습니다. 외부 폴더에 배치하는 것이 가장 좋은 방법이라면이를 구현할 것입니다. 답장을 보내 주셔서 감사합니다! – user1928162

+1

"Java Web Start는 매니페스트 파일의 Class-Path 항목을 지원하지 않습니다."- [FAQ] (http://docs.oracle.com/javase/6/docs/technotes/guides/javaws/developersguide/ faq.html # 209) – trashgod

답변

2

적절한 방법은 웹 스타트 응용 프로그램을 패키지로 당신이 일을 당신이 <resources> 태그에 사용하는 라이브러리 jar 파일을 나열하는 것입니다. 내 프로젝트는 12 개의 라이브러리 파일을 사용하며 시작 시간은 여전히 ​​상당히 좋습니다. 프로그램이 두 번째로 시작되면 모든 클라이언트 PC는 jar 파일이 변경되지 않았는지 확인해야합니다. 이로 인해 향후 출시가 매우 빨라집니다.

라이브러리에 여러 jar 파일이있는 경우 서버에있는 파일의 최종 수정 날짜를 로컬에 저장된 버전과 비교하면 시간이 오래 걸릴 수 있습니다. 이 업데이트를보다 효율적으로 확인하려면 리소스 파일에 버전 번호를 지정하면됩니다 (avoid unnecessary update checks).

JNLP가 서명 된 코드를 포함해야하는 경우, 한 번에 하나씩 모든 jar 파일을 노래해야하는 고통이 발생할 수 있습니다. 이 프로세스를 단순화하려면 lib 폴더의 모든 jar에 서명하는 다음 ant 스크립트를 고려하십시오.

<target name="signLibs"> 
    <signjar destDir="signed" alias="aliasName" keystore="yourKeyStoreName" 
     storepass="PaSSW0rD" force="true" > 
    <path> 
     <fileset dir="lib" includes="*.jar" /> 
    </path> 
    </signjar> 
    <echo message="Library files were signed."/> 
</target> 
+0

ok, 모든 항아리에 서명하는 스크립트에 감사드립니다. 나는 또한 그것을 찾고 있었다 – user1928162

+0

jar 파일은 파일이 바뀔 때 (또는 각 배치마다) 변경되는 배치 된 파일 이름에 시간 소인을 갖도록 강력히 권장 할 수있다. 다른 파일 이름은 타임 스탬프 비교 확인이 실패 할 경우 이전 버전이 실수로 새 버전으로 착각하지 않도록합니다. 우리는 이것을 생산에 물렸다. –

+0

@ ThorbjørnRavnAndersen -하지만 JNLP 파일은 명시 적으로 jar 자원의 이름을 지정하므로 변경해야합니다. 내 사용자가 내 앱을 설치하고 바탕 화면 바로 가기에서 또는 관련 파일을 두 번 클릭하여 실행하도록하고 싶습니다. 너의 제안을 받아 들일 수 없다는 뜻이지? – Thorn

관련 문제