2017-11-29 14 views
0

새로운 실행 파일을 만들지 않고 특정 라이브러리를 새로운 버전의 라이브러리로 대체 할 수있는 maven을 사용하여 실행 가능한 jar를 생성 할 수 있습니까?라이브러리를 교체 할 수있는 maven으로 실행 파일 jar를 생성하십시오.

+1

응용 프로그램 디렉토리의'lib' 폴더에 라이브러리를 보관하고 클래스 경로로 버전 번호가 아닌 하나의 jar가 아니라 lib 디렉토리를 가질 수 있습니다. (jar 파일의 버전 번호를 제거하는 것은 약간은 알 수 없습니다.) –

답변

1

예, 당신이 정의한 provided dependency 같은해야

<dependency> 
    <groupId>group-a</groupId> 
    <artifactId>artifact-b</artifactId> 
    <version>[1.0,)</version> 
    <type>bar</type> 
    <scope>provided</scope> 
</dependency> 

그리고 실행할 때 의존성이 응용 프로그램 클래스 경로에 사용할 수 있는지 확인합니다. 예를 들어 java 명령을 사용하여 실행 가능한 jar를 실행하면 다음과 같습니다.

java -jar MyExecutableJar.jar -cp /path/to/my/library.jar 

그런 다음 실행 가능한 jar를 빌드하고 실행할 수 있습니다. 아니이 방법을 사용하여 몇 가지 단점이 있습니다 :

  • 당신의 당신이 당신의 항아리를 실행할 수 있습니다
  • 메이븐 의존성의 버전을 알 수 없습니다 때 라이브러리가 클래스 경로에 있는지 확인해야합니다 사용하면 빌드 재현성이 떨어집니다.
  • Maven은 각 종속성에 버전이 있어야합니다. 내 예제에서는 [1.0,)을 사용하여 Maven에 버전 1.x 이상이 필요하다고 말하면 컨텍스트에 맞게 조정할 수 있습니다. 당신의 항아리 말했다되고 그건

을 다시 컴파일 할 것이 아니라 현재의 JAR와 호환되지 않는 방식으로 라이브러리의 API 변경, 당신은 선택의 여지가없는 경우

  • , 나는 당신이 원하는 이유를 알고하지 않습니다 그러한 조건을 가진 JAR을 만들 수는 있지만, 최신 버전이 필요할 때마다 JAR을 다시 빌드하거나 종속성 및 프로젝트 아키텍처를 변경하는 것이 좋습니다. 이렇게하면 모범 사례와 메이븐 디자인에 위배됩니다.

    좀 더 자세한 내용을 제공하면 더 자세히 설명하겠습니다.

  • +0

    나와 내 동료 (다른 회사)가 응용 프로그램의 다른 부분에서 작동합니다. 나는 GUI에서 일하고 있으며 그는 응용 프로그램을 위해 구축하고있는 라이브러리를 개선하고 있습니다. 그는 그가 그것을 보내야만하는 새로운 항아리를 만들지 않고 그의 변화로 응용 프로그램을 테스트 할 수 있도록 요구했습니다. – Yupp