2017-10-03 20 views
0

내 프로젝트는 아래 2 개의 종속성에 따라 다릅니다.JAR의 2 가지 버전 따기

<dependency> 
    <groupId>com.myorg.projectA</groupId> 
    <artifactId>projectA</artifactId> 
    <version>0.0.1-RELEASE</version> 
</dependency> 

<dependency> 
    <groupId>com.myorg.projectB</groupId> 
    <artifactId>projectB</artifactId> 
    <version>0.0.1-RELEASE</version> 
</dependency> 

이러한 종속성은 모두 morphia의 다른 버전에 따라 다릅니다. 프로젝트를 빌드 할 때 오직 하나의 변형 만 선택됩니다. morphia 버전이 필요합니다.

여기에 this 솔루션을 기반으로 추가 한 내용이 있지만 작동하지 않는 것 같습니다.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>3.0.0</version> 
    <configuration> 
     <descriptor>src/assembly/dep.xml</descriptor> 
    </configuration> 
    <executions> 
     <execution> 
     <id>copy-dependencies</id> 
     <phase>package</phase> 
     <goals> 
      <goal>copy-dependencies</goal> 
     </goals> 
     <configuration> 
      <artifactItems> 
       <artifactItem> 
        <groupId>org.mongodb.morphia</groupId> 
        <artifactId>morphia</artifactId> 
        <classifier>server</classifier> 
        <version>1.3.2</version> 
        <type>jar</type> 
       </artifactItem> 
       <artifactItem> 
        <groupId>org.mongodb.morphia</groupId> 
        <artifactId>morphia</artifactId> 
        <classifier>server</classifier> 
        <version>0.110</version> 
        <type>jar</type> 
       </artifactItem> 
      </artifactItems> 
    <outputDirectory>${project.build.directory}/dependency/</outputDirectory> 
    </configuration> 
</execution> 

내 어셈블리 파일 dep.xml

<?xml version='1.0' encoding='UTF-8'?> 
<assembly> 
    <id>jar-with-dependencies</id> 
<formats> 
    <format>jar</format> 
</formats> 

<dependencySets> 
    <dependencySet> 
     <scope>runtime</scope> 
     <unpack>true</unpack> 
     <unpackOptions> 
      <excludes> 
       <exclude>**/LICENSE*</exclude> 
       <exclude>**/README*</exclude> 
      </excludes> 
     </unpackOptions> 
    </dependencySet> 
</dependencySets> 

<fileSets> 
    <fileSet> 
    <directory>${project.build.directory}/dependency</directory> 
    <outputDirectory>/dependency</outputDirectory> 
    <filtered>false</filtered> 
    <includes> 
     <include>*.jar</include> 
    </includes> 
    <fileMode>0600</fileMode> 
    </fileSet> 
</fileSets> 

내가 모르핀의 버전이 다운로드되는 또는 내 dependency 폴더에 복사 모두 표시되지 않습니다.

+0

먼저 maven-assembly-plugin 원인 [maven-assembly-plugin] (http://maven.apache.org/plugins/maven-assembly-plugin/plugin-info.html)의 목표와 혼동을 느낍니다. 단 하나의 목표'single'는 목표'copy-dependencies'를 가지고 있지 않습니다 ... 또한 만약 당신이 morphia의 두 버전을 classpath에 놓고 싶다면? 그것은 단순히 당신이 원하는 것이 아닌 클래스 패스의 순서에 달려 있습니다. 당신은 하나가 사용될 결정을 내려야합니다 ... – khmarbaise

+0

Morphia의 어떤 버전을 원하십니까? 최신 버전은 이전 서버와 호환되므로 일반적으로 최신 Morphia가 프로젝트에 필요합니다. –

+0

@NicCottrell 우리는'morphia-1.3.2'와'morphia-0.110'을 사용하고 있습니다. 그들이 호환되는지 확실하지 않습니다. 비록 그것이 그렇다고해도, 그들은 Mongo 운전자와도 호환되어야한다. 두 lib는 서로 다른 드라이버 버전으로 서로 다른 몽고에 연결됩니다. – user1324887

답변

0

Maven은 전이 의존성으로 인해 종종 다른 버전의 이슈를 찾습니다. 이 경우 Maven은 만나는 첫 번째 아티팩트 만 가져옵니다.

두 버전의 이슈로 끝내려면 maven-build-helper-plugin과 같은 플러그인을 사용할 수 있습니다. 하지만 아마도 당신이 원하는대로 끝나지 않을 것입니다. 런타임에 두 개의 서로 다른 버전의 jar를 사용하려면 클래스 로더를 처리해야하며 작업하기가 정말 어려울 수 있습니다. 그 경로를 내려 가고 싶다면 osgi를 살펴보고 그 중 하나가 Felix과 같은 구현임을 제안합니다.

+0

나는 공유 된 링크가 비슷하다고 생각합니다. 내가 직면 한 것을 발급한다. 나는'maven-assembly-plugin'을 사용하는 다른 게시물을 발견했습니다. 내가 틀릴 수도 있지만 정보를 사용할 수있는 것처럼 사람들이 클래스 로더 놀지 않고 해결책을 찾은 것 같았나요? – user1324887