2014-10-31 3 views
0

Tycho 빌드에서 사용할 수있는 기존 Eclipse RCP 애플리케이션의 번들 수가 많습니다. 이 번들에는 아직 p2 저장소가 없으므로이 저장소를 만들었습니다. 설치 과정에서 압축을 풀어야하는 번들이 여전히 JAR로 설치된다는 점을 제외하고는 이미 잘 작동합니다.Eclipse-BundleShape 헤더가없는 Eclipse 패키지 작성 방법

p2 저장소를 만드는 첫 번째 방법은 번들을 Maven 저장소에 배포 한 다음 pomDependency = eclipse-featureeclipse-repository에 포함하는 것이 좋습니다. 그러나 Tycho는 feature.xml의 unpack 속성을 무시하므로 작동하지 않습니다 (cf. this documentation). 이 문제점에 대한 권장 해결책은 포함 된 번들의 목록에 Eclipse-BundleShape: dir을 추가하는 것입니다. 나는 그것을 할 수있다 - 그러나 내가 묶음의 수백을 가지고 있기 때문에, 이것은 상당한 노력 일 것이다.

그런 다음 필자에게 "기능 및 번들 게시자 응용 프로그램"을 사용하는 팁을 받았습니다.이 응용 프로그램에서는 기능과 번들 아티팩트가 동시에 p2 저장소에 만들어 지므로 번들 모양에 대한 정보는 feature.xml에서 해당 번들로 복사됩니다.

그러나 이것은 여전히 ​​작동하지 않습니다 : 내가 게시 번들 중 하나 unpack="true"를 설정했지만, 번들이 P2 저장소의은 content.xml에

<instruction key='zipped'> 
    true 
</instruction> 

이 없습니다 따라서 설치할 때 포장을 풀지 않습니다. 내가 뭘 잘못했는지 모든 아이디어? 다른 아이디어는 어떻게 작동 시키는가?


이는 P2 저장소 생성을위한 내 의 pom.xml입니다 :

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

    <groupId>com.mycorp.xyz.expose</groupId> 
    <artifactId>com.mycorp.xyz.expose.orbit</artifactId> 
    <version>1.0.0</version> 

    <dependencies> 
     <dependency> 
      <groupId>com.mycorp.xyz.expose</groupId> 
      <artifactId>com.mycorp.somelib</artifactId> 
      <version>6.40.0</version> 
     </dependency> 
     <!-- and many more... --> 
    </dependencies> 

    <build> 
     <outputDirectory>${project.build.directory}/artifacts</outputDirectory> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <version>2.9</version> 
       <executions> 
        <execution> 
         <id>copy</id> 
         <phase>process-resources</phase> 
         <goals> 
          <goal>copy-dependencies</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>${project.build.directory}/artifacts/plugins</outputDirectory> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.eclipse.tycho.extras</groupId> 
       <artifactId>tycho-p2-extras-plugin</artifactId> 
       <version>0.21.0</version> 
       <executions> 
        <execution> 
         <id>publish-features-and-bundles</id> 
         <phase>compile</phase> 
         <goals> 
          <goal>publish-features-and-bundles</goal> 
         </goals> 
         <configuration> 
          <sourceLocation>${project.build.directory}/artifacts</sourceLocation> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.eclipse.tycho</groupId> 
       <artifactId>tycho-p2-repository-plugin</artifactId> 
       <version>0.21.0</version> 
       <executions> 
        <execution> 
         <id>assemble</id> 
         <phase>package</phase> 
         <goals> 
          <goal>verify-repository</goal> 
          <goal>archive-repository</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

프로젝트의 유일한 다른 파일은 SRC/메인/자원에서 다음 feature.xml을입니다/features` :

<?xml version="1.0" encoding="UTF-8"?> 
<feature 
     id="com.mycorp.xyz.expose.orbit" 
     label="..." 
     version="1.0.0"> 

    <plugin 
     id="com.mycorp.somelib" 
     download-size="0" 
     install-size="0" 
     version="0.0.0" 
     unpack="true"/> 

    <!-- and many more... --> 

</feature> 
+0

이것은 내가 현재 내부적으로 가지고있는 (거의 완벽한 해결책으로) 아주 좋은 질문입니다. 저는 다른 사람들이 질문과 답변의 혜택을 누리기 위해 그것을 나눠주고 있습니다. – oberlies

답변

1

설명 된 기능에서 실행중인 기능 및 번들 게시자 응용 프로그램을 디버깅했습니다. etup을 참조하십시오. 버전이 일치하지 않으므로 게시자는 feature.xml의 unpack="true"을 번들과 연결하지 않습니다.

따라서 feature.xml에 0.0.0 대신 참조 된 번들의 실제 OSGi 버전을 제공해야합니다. 일반적인 Tycho 빌드 에서처럼 자동 교체가 없습니다. 따라서 feature.xml은 예를 들어 다음과 같이 예상대로

<?xml version="1.0" encoding="UTF-8"?> 
<feature 
     id="com.mycorp.xyz.expose.orbit" 
     label="..." 
     version="1.0.0"> 

    <plugin 
     id="com.mycorp.somelib" 
     download-size="0" 
     install-size="0" 
     version="6.40.0.140829051758" 
     unpack="true"/> 

</feature> 

그런 다음, 번들이 설치시에 압축 해제됩니다.