2012-04-20 2 views
7

다른 제 3 자에게 의존성이있는 Maven/Tycho로 Eclipse 플러그인을 빌드해야합니다. 종속성을 삽입하는 것은 아직 티코를 지원하지 않습니다, 나는 다음과 같은 두 가지로 프로젝트를 분할 :Tycho : '종속성을 만족시킬 수 없습니다 ...'다중 모듈 부모를 통해 빌드 할 때

  • A-thirdparty : 받는다는 - 번들 플러그인, 'Embed-을 필요에 의해 만들어진 포장'번들 '와 프로젝트 종속성 ' 명령 및 플러그인 에 필요한 모든 패키지 수출'A : 이클립스 플러그인 ''
  • A 포장을 가진 프로젝트 '를 티코 - 받는다는 - 플러그인을 사용하고 티코의 목표 플랫폼에 pomDependenciesconsider으로 설정된 구성 플러그 인.

개별적으로 (처음에는 thirdparty 애그리 게이터, 프로젝트 A 자체에서는) 모든 것을 잘 만들 수 있습니다. 나는 (멀티 모듈 POM을 사용하여) 모두 해당 프로젝트를 집계한다면, 나는 다음과 같은 메이븐 오류가 발생합니다 : 통합 된 방식으로 건축 계획이 오류가 발생 않으며, 해결 방법의 종류가 가능한 경우가 될 수 왜

Caused by: java.lang.RuntimeException: "No solution found because the problem is unsatisfiable.": ["Unable to satisfy dependency from A 1.0.0.qualifier to package org.apache.axis2.transaction 0.0.0.", "Unable to satisfy dependency from A 1.0.0.qualifier to package org.apache.axis2.addressing.i18n 0.0.0.", ... 

티코 버그 야?

비록 하나의 모듈 만 집계 POM (독립적으로 하나)에두면 오류가 없습니다.

작은 유사한 멀티 모듈 샘플을 재현 할 수 없습니다 EDIT. 즉, POM 계층 구조에 대해 뭔가있는 것이 있습니다.

EDIT2

의존성의 동일한 세트 (축 2 & AXIOM libs와의 커플)을 포함한 후에 작은 유사한 다중 모듈 샘플을 재현 할 수 있었다.

EDIT3 : 문제는 내가 포함 타사 라이브러리를 필요로하는 모든 thirdparties 누락에 대해 경우 최소한의 예

지금 궁금하네요. 그렇다면 왜 두 모듈을 따로 실행할 때 성공적으로 빌드 할 수 있으며 부모, 다중 모듈 pom.xml을 통해 완료 될 때만 빌드가 실패합니다. 아래의 예는 first-thirdparty과 같은 첫 번째 아티팩트에 번들로 제공되는 하나의 단일 축 2 커널 JAR 만 포함합니다.

A 대신, 예 : first 키가 있습니다. 폴더 구조는 다음과 같습니다 :

./pom.xml 
./first-thirdparty 
    pom.xml 
./first 
    src/main/java/org/mydemo/Test.java // has just one method that simply returns AxisFault.class.getSimpleName(); to test import resolution 
    META-INF/MANIFEST.MF 
    build.properties 
    pom.xml 

루트 치어 : first-thirdparty

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
     http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>org.mydemo</groupId> 
    <artifactId>first-aggregator</artifactId> 

    <packaging>pom</packaging> 
    <version>1.0.0-SNAPSHOT</version> 


    <modules> 
     <module>first-thirdparty</module> 
     <module>first</module> 
    </modules> 

</project> 

POM. 그것은 단순히 축 2 - 커널 JAR을 내장합니다 (다른 라이브러리가 없습니다 ..).) 이클립스 플러그인 및 first-thirdparty에 따라 first

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=   "http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <groupId>org.mydemo</groupId> 
     <artifactId>first-aggregator</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
     <relativePath>../pom.xml</relativePath> 
    </parent> 

    <properties> 
     <manifest-location>META-INF</manifest-location> 
    </properties> 

    <packaging>bundle</packaging> 

    <groupId>org.mydemo</groupId> 
    <artifactId>first-thirdparty</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 

    <dependencies> 
     <dependency> 
      <groupId>org.apache.axis2</groupId> 
      <artifactId>axis2-kernel</artifactId> 
      <version>1.5.1</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.felix</groupId> 
       <artifactId>maven-bundle-plugin</artifactId> 
       <extensions>true</extensions> 
       <configuration> 
        <instructions> 
         <Embed-Dependency> 
          axis2-kernel 
         </Embed-Dependency> 
         <_exportcontents> 
          org.apache.axis2.*;version="1.5.1" 
         </_exportcontents> 
         <Bundle-ClassPath>{maven-dependencies}</Bundle-ClassPath> 
         <Embed-Transitive>true</Embed-Transitive> 
         <Embed-Directory>jars</Embed-Directory> 
         <_failok>true</_failok> 
         <_nouses>true</_nouses> 
        </instructions> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

POM :

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
     http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <groupId>org.mydemo</groupId> 
     <artifactId>first-aggregator</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
     <relativePath>../pom.xml</relativePath> 
    </parent> 

    <groupId>org.mydemo</groupId> 
    <artifactId>org.mydemo.first-bundle</artifactId> 

    <packaging>eclipse-plugin</packaging> 
    <version>1.0.0-SNAPSHOT</version> 

    <properties> 
     <tycho.ver>0.14.1</tycho.ver> 
    </properties> 

    <repositories> 
     <repository> 
      <id>helios</id> 
      <layout>p2</layout> 
      <url>http://download.eclipse.org/releases/indigo</url> 
     </repository> 
    </repositories> 

    <dependencies> 
     <dependency> 
      <groupId>org.mydemo</groupId> 
      <artifactId>first-thirdparty</artifactId> 
      <version>1.0.0-SNAPSHOT</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.eclipse.tycho</groupId> 
       <artifactId>tycho-maven-plugin</artifactId> 
       <version>${tycho.ver}</version> 
       <extensions>true</extensions> 
      </plugin> 
      <plugin> 
       <groupId>org.eclipse.tycho</groupId> 
       <artifactId>target-platform-configuration</artifactId> 
       <version>${tycho.ver}</version> 
       <configuration> 
        <pomDependencies>consider</pomDependencies> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

모듈 first의 MANIFEST.MF;

Manifest-Version: 1.0 
Bundle-Version: 1.0.0.qualifier 
Tool: Bnd-0.0.357 
Bundle-Name: first-bundle 
Bnd-LastModified: 1334819004300 
Created-By: 1.6.0_25 (Sun Microsystems Inc.) 
Bundle-ManifestVersion: 2 
Bundle-SymbolicName: org.mydemo.first-bundle 
Export-Package: org.mydemo 
Import-Package: org.apache.axis2.clustering.context, 
org.apache.axis2.modules, 
org.apache.axis2.deployment.util, 
org.apache.axis2.dataretrieval.client, 
org.apache.axis2.clustering, 
org.apache.axis2.wsdl.util, 
org.apache.axis2.clustering.configuration, 
org.apache.axis2.java.security, 
org.apache.axis2.deployment.resolver, 
org.apache.axis2.util, 
org.apache.axis2.wsdl, 
org.apache.axis2.addressing.metadata, 
org.apache.axis2.i18n, 
org.apache.axis2.deployment.scheduler, 
org.apache.axis2.dataretrieval, 
org.apache.axis2.dispatchers, 
org.apache.axis2.transport,org.apache.axis2.service, 
org.apache.axis2.deployment.repository.util, 
org.apache.axis2.client, 
org.apache.axis2.context, 
org.apache.axis2.classloader, 
org.apache.axis2.receivers, 
org.apache.axis2.engine, 
org.apache.axis2.addressing, 
org.apache.axis2.deployment, 
org.apache.axis2.transport.http, 
org.apache.axis2.phaseresolver, 
org.apache.axis2.context.externalize, 
org.apache.axis2.transaction, 
org.apache.axis2.description, 
org.apache.axis2.addressing.wsdl, 
org.apache.axis2.transport.http.util, 
org.apache.axis2.util.threadpool, 
org.apache.axis2, 
org.apache.axis2.handlers, 
org.apache.axis2.addressing.i18n, 
org.apache.axis2.builder, 
org.apache.axis2.description.java2wsdl, 
org.apache.axis2.builder.unknowncontent, 
org.apache.axis2.namespace, 
org.apache.axis2.description.java2wsdl.bytecode, 
org.apache.axis2.client.async, 
org.osgi.framework;version="1.3.0" 
Bundle-Localization: plugin 
+0

묻는 유지 Maven을 다시 호출합니다. – SpellingD

+0

@ SpellingD 코드를 최소화하기 위해 코드 샘플을 넣을 것입니다. –

+0

@ SpellingD 많은 코드가 없지만 일부 공유 저장 장치로 옮길 생각입니다. 제안 할 수 있다면 그렇게하십시오. 그 Axis2 의존성에 대한 문제가 포함되어 있지 않다면 지금 궁금합니다. 그리고 이것은 빌드 프로세스에 영향을 미칩니다. 그러나 이러한 모듈을 개별적으로 빌드 할 수 있으므로 여러 모듈 부모를 통해 모듈을 집계하는 것이 잘못된 이유가 궁금합니다. –

답변

11

"POM-최초의"번들 (즉, 번들 받는다는 - 번들 플러그인 내장)와 "MANIFEST 주먹"번들을 구축 할 수 없습니다 (즉, 번들 : 명시 적으로, 축 커널의 모든 패키지를 가져옵니다 Tycho에 의해 건축 된). 이것은 known limitation in Tycho입니다.

이유는 Tyco가 Maven 라이프 사이클에서 너무 일찍 너무 의존성 해결을 수행했기 때문에 maven-bundle-plugin이 아직 Manifest (Tycho에서 필요함)를 생성 할 기회가 없었기 때문입니다. 이 문제를 해결하려면 quite large changes이 필요하지만 중간에 완료 할 수 있기를 바랍니다.

+0

감사합니다. 이것은 정말로 가치있는 의견입니다. 이 케이스를 단일 빌드 내에서 작동시키는 데 관심이 있으니 가능한 한 빨리 요청을여십시오. 내 문제의 원인을 명확하게 설명 할 때 답변을 수락합니다. –

1

난 그냥 같은 벌어 질을 얻을 이런 식으로 내 문제를 해결하는 데 도움이 당신이 플러그인 항아리의 부족 때문에

1 오류를 얻는 이유는 도움이 될 희망했다. 예를 들면 "원인 : java.lang.RuntimeException :"문제가 해결할 수 없기 때문에 해결책을 찾지 못했습니다. ": [1.0.0.qualifier에서 org.apache.axis2.transaction 패키지로의 종속성을 만족시킬 수 없습니다. 0.0.0. "," 첫 번째 것을 보면, 당신은 "org.apache.axis2.transaction 0.0.0."을 가지고 있지 않다. 솔직히 말해서, 내가 무엇을 위해 사용되는 항아리인지, 그리고 그것을 얻는 방법을 잘 모르겠다. 나는 Eclipse의 다른 버전에서 일부 플러그인 종속성을 놓쳤다. 그래서 나는 단지/Eclipse/plugins에 jar 파일이 필요하다. 그래서 당신은 p2를 생성한다. 저장소 자신. 여기에 바로 링크가 어떻게이있는 경우

<repository> 
     <id>localP2resp</id> 
     <url>file:///F:/P2Repository</url> 
     <layout>p2</layout> 
    </repository> 

3 지금까지이 문제를 해결해야 UR 받는다는 치어 파일의 P2 저장소를 http://maksim.sorokin.dk/it/2010/11/26/creating-a-p2-repository-from-features-and-plugins/

은 2이 저장소를 생성하는 스크립트를 사용하는 또 다른 사람이다 그것은 무슨 일이 '를 명령뿐만 아니라 우리에게 마스터의 pom.xml을 보여 도움이 될 것이다 당신은 다른 질문이 없거나 그렇게 나의 대답 satify 경우

을 P2repository에 필요한 플러그인 항아리는 들으