문제

Java를 지정할 수 있습니까? classpath 여기에는 다른 JAR 파일에 포함 된 JAR 파일이 포함되어 있습니까?

도움이 되었습니까?

해결책

응용 프로그램과 필요한 라이브러리가 포함 된 단일 항아리를 만들려고한다면 그렇게하는 두 가지 방법이 있습니다. 첫 번째는입니다 한 자르, 특수 클래스 로더를 사용하여 항아리의 중첩을 허용합니다. 두 번째는입니다 우버 자르, (또는 그늘), 포함 된 라이브러리를 폭발시키고 모든 클래스를 최상위 항아리에 넣습니다.

또한 Uberjar와 Shade는 각각 Maven1 및 Maven2 용 플러그인이라고 언급해야합니다. 아래에서 언급했듯이 어셈블리 플러그인을 사용할 수도 있습니다 (실제로는 훨씬 강력하지만 제대로 구성하기가 훨씬 어렵습니다).

다른 팁

"폭발적인 항아리 내용"솔루션을 사용하고 싶지 않습니다. 그들은 분명히 물건을보기가 더 어렵습니다 (모든 것이 같은 수준에서 폭발하기 때문에). 또한, 명명 충돌이있을 수 있습니다 (사람들이 적절한 패키지를 사용하는 경우 발생하지는 않지만 항상 제어 할 수는 없습니다).

당신이 원하는 기능은 중 하나입니다 상위 25 개의 태양 RFE: RFE 4648386, 어떤 태양은 그들의 무한한 지혜에서 우선 순위가 낮은 것으로 지정되었습니다. 우리는 태양이 일어나기를 바랄뿐입니다 ...

한편, 내가 만난 최상의 솔루션 (JDK에서 태양이 복사하기를 바랍니다)은 사용자 정의 클래스 로더를 사용하는 것입니다. jarclassloader.

일부 연구 후 Maven 또는 타사 확장/프로그램이 필요하지 않은 방법을 발견했습니다.

매니페스트 파일에서 "클래스 경로"를 사용할 수 있습니다.

예를 들어:

매니페스트 파일 manifest.mf를 만듭니다

Manifest-Version: 1.0
Created-By: Bundle
Class-Path: ./custom_lib.jar
Main-Class: YourMainClass

모든 수업을 컴파일하고 실행하십시오 jar cfm Testing.jar MANIFEST.MF *.class custom_lib.jar

c Create Archive를 나타냅니다f 파일을 지정하려는 것을 나타냅니다v 장황한 입력입니다m 이는 사용자 정의 매니페스트 파일을 전달할 것임을 의미합니다

Lib in Jar 패키지를 포함시켜야합니다. 정상적인 방식으로 항아리를 실행할 수 있어야합니다.

기반 : http://www.ibm.com/developerworks/library/j-5things6/

클래스 경로에 대해 필요한 다른 모든 정보를 찾으십니까? 여기

사용 ZipGroupFileset 태그 (동일한 속성을 사용합니다 파일 세트 꼬리표); 디렉토리의 모든 파일을 압축하고 새 아카이브 파일에 추가합니다. 추가 정보: http://ant.apache.org/manual/tasks/zip.html

이것은 Jar-in-a-Jar 문제를 해결하는 매우 유용한 방법입니다. 저는이 정확한 stackoverflow 질문을 검색하면서 무엇을 해야하는지 알아 내기 때문에 알고 있습니다. 항아리 나 항아리 폴더를 개미로 만든 하나의 항아리에 포장하려면이 클래스 경로 또는 타사 플러그인 물건을 모두 잊어 버리십시오.

<jar destfile="your.jar" basedir="java/dir">
  ...
  <zipgroupfileset dir="dir/of/jars" />
</jar>

개미로 빌드하는 경우 (Eclipse에서 개미를 사용하고있는 경우) ANT에 추가하여 추가 항아리 파일을 추가하여 추가 한 사람이 유지 관리하는 프로젝트가있는 경우 반드시 최상의 방법은 아닙니다. 한 사람의 프로젝트는 쉽고 쉽습니다.

예를 들어 .jar 파일을 작성하는 대상은 다음과 같습니다.

<jar destfile="${plugin.jar}" basedir="${plugin.build.dir}">
    <manifest>
        <attribute name="Author" value="ntg"/>
        ................................
        <attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
    </manifest>
</jar>

방금 한 줄을 추가했습니다.

<jar ....">
    <zipgroupfileset dir="${external-lib-dir}" includes="*.jar"/>
    <manifest>
        ................................
    </manifest>
</jar>

어디

<property name="external-lib-dir" 
          value="C:\...\eclipseWorkspace\Filter\external\...\lib" />

외부 항아리와의 멍청이였습니다. 그리고 그게 다야...

자신의 클래스 로더를 쓰지 않고는 아닙니다. 항아리의 클래스 경로에 항아리를 추가 할 수 있지만 메인 항아리에 포함되지 않은 공동 배치해야합니다.

이 작업을 수행하려면 사용자 정의 클래스 로더 또는이를 지원하는 타사 라이브러리를 구축해야합니다. 가장 좋은 방법은 런타임에서 항아리를 추출하여 클래스 경로에 추가하는 것입니다 (또는 이미 클래스 스팟에 추가하도록합니다).

나는 Java 빌드에 Maven을 사용합니다. Maven 어셈블리 플러그인.

그것은 당신의 요청을 수행하지만 다른 제안들 중 일부와 마찬가지로 묘사 한 것과 마찬가지로, 본질적으로 모든 부양 항아리를 폭발시키고 단일 항아리로 재결합합니다.

Eclpise IDE가있는 경우 항아리를 내보내고 "포장 필수 라이브러리를 생성 된 JAR로 선택"하면됩니다. Eclipse는 필요한 종속 항아리를 생성 된 JAR에 자동으로 추가 할뿐만 아니라 이러한 항아리를 자동으로로드하는 Eclipse Custom Class 로더를 생성합니다.

패키지 시스템이 깔끔하게 분리되어야하므로 모든 파일을 같은 레벨에서 추출한 다음 결과에서 항아리를 만들도록 조언하려고했습니다. 그것은 수동 방식 일 것입니다. Steve가 지시 한 도구가 그렇게 잘 할 것이라고 생각합니다.

윈스톤은 꽤 좋습니다 http://blog.jayway.com/2008/11/28/executable-war-with-winstone-maven-plugin/. 그러나 복잡한 사이트는 아닙니다. 그리고 플러그인을 포함시키는 것만으로도 부끄러운 일입니다.

일식을 사용하는 경우 매우 쉬운 방법이 있습니다.

프로젝트를 "runnable"JAR 파일로 내보내십시오 (Eclipse 내에서 프로젝트 폴더를 마우스 오른쪽 버튼으로 클릭하고 "내보내기 ..."). 내보내기 설정을 구성 할 때 "필요한 라이브러리를 생성 된 JAR로 추출하십시오"를 선택하십시오. 명심하고 "추출 ..."을 선택하고 ~ 아니다 "패키지 필수 라이브러리 ...".

또한: 내보내기 설정에서 실행 구성을 선택해야합니다. 따라서 일부 클래스에서 빈 주 ()를 항상 생성하고 실행 구성에 사용할 수 있습니다.

어쨌든, 그렇지 않습니다 보장 시간의 100% 작동 - 팝업 메시지가 표시되어 포함하는 JAR 파일의 라이센스를 확인하고 서명 파일을 복사하지 않는 것에 대한 내용을 확인하십시오. 그러나 나는 이것을 위해 이것을하고있다 연령 문제가 발생하지 않았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top