Строить банку, которая будет использоваться в Eclipse PDE?

StackOverflow https://stackoverflow.com/questions/3015793

  •  26-09-2019
  •  | 
  •  

Вопрос

Я написал приложение, которое использует третью сторону библиотеку. Затем я упаковал это в качестве исполняемой банки, используя плагин Maven-Assember-Plugin (создавая банку со всеми зависимостями, включая некоторые из сторонних банок).

Далее мне нужно добавить эту банку в проект PDE, поэтому его можно запустить из Eclipse. Но сделать эту работу, мне нужно добавить некоторые тирско-партийные зависимости в мой PDE-проект, который уже находится в упакованной банке. Поэтому я получаю дублированные зависимости. Любые идеи о том, как избежать этого? Или предложение к документации, которая описывает, как это делается должным образом?

Это было полезно?

Решение

Вы должны построить банку, это Osgi Bundle: Итак, оно содержит необходимые манифест. MF с помощью подключаемого идентификатора и номером версии (это не меняет факт, что баночка остается исполняемым). Будьте осторожны, чтобы добавить опцию «Экспорт-пакеты», чтобы сделать код доступен для других плагинов / пучков.

После этого вы можете установить эту банку в целевую платформу, используемую PDE Project (поиск целевой платформы в настройках), поэтому он становится доступным для других плагинов по ID (вы можете добавить его как зависимость).

Таким образом, если хотя бы один плагин нуждается в вашей банке, она загружается, но не будет загружена несколько раз.

Другие советы

Я думаю, что это просто простая плохая практика, чтобы включить другие банки в вашей банке. Но если вы хотите сохранить это таким образом, как насчет создания двух банок из одной сборки: полный с зависимостями, и простой, который используется в PDE (просто используйте несколько исполнений в плагине сборки)

Сейчас я использую плагин Maven-Bundle:

      <plugin>
          <groupId>org.apache.felix</groupId>
          <artifactId>maven-bundle-plugin</artifactId>
          <version>1.4.0</version>
          <extensions>true</extensions>
          <configuration>
              <instructions>
                  <Bundle-SymbolicName>${pom.groupId}.${pom.artifactId}</Bundle-SymbolicName>
                  <Bundle-Name>${pom.name}</Bundle-Name>
                  <Bundle-Version>${pom.version}</Bundle-Version>
                  <Bundle-Activator>org.wso2.mbp.sample01.Activator</Bundle-Activator>
                  <Private-Package>org.wso2.mbp.sample01</Private-Package>
              </instructions>
          </configuration>
      </plugin> 

http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html.

построить пакет. Но как я могу использовать плагин Bundle, поэтому он создает файл манифеста для BAR Build с помощью плагина Maven-Assember, который я использую:

    <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
      <appendAssemblyId>true</appendAssemblyId>
      <finalName>myApp</finalName>

      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>         
      <archive>
        <manifest>
          <mainClass>com.TestMain</mainClass>                     
          <packageName>com.</packageName>
        </manifest>
      </archive>    
    </configuration>
    <executions>
      <execution>
        <id>make-assembly</id>
        <phase>package</phase>
        <goals>
          <goal>assembly</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top