не удалось удовлетворить зависимость от com.lmax.disruptor 3.2.0 до пакета sun.misc 0.0.0

Я разрабатываю плагин eclipse, которому нужен com.lmax.disruptor. Он импортирует sun.misc. У меня есть это в моем репозитории p2, но когда я maven собираю свой плагин, я получаю эту ошибку «невозможно удовлетворить зависимость от com.lmax.disruptor 3.2.0 до пакета sun.misc 0.0.0».

Я просмотрел сайты Разрешить зависимость от пакета sun.misc с Tycho они говорят создать фрагмент плагина, но когда я попытался создать его и добавил страницу экспорта как sun.misc, он выдает ошибку, например «пакет sun.misc не существует в плагине».

Как решить эту проблему, пожалуйста, помогите мне с этим.? Вместо того, чтобы создавать новый фрагмент плагина, есть ли какой-либо возможный способ добавить его в сам плагин?

Спасибо,


person Obuli Sundar    schedule 17.09.2015    source источник


Ответы (1)


Как упоминалось в oberlies' answer в вопросе, на который вы ссылаетесь, вам необходимо создать фрагмент системного пакета, который предоставляет, т. е. экспортирует, пакет sun.misc. Я не знаю другого способа. Однако это проще, чем можно было ожидать.

Вы делаете это, создавая OSGi MANIFEST.MF, который экспортирует sun.misc, а затем объединяете его во фрагмент. Это делается через Maven следующим образом.

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
      <groupId>your.group</groupId>
      <version>1.0.0</version>

    <artifactId>your.group.fragment.sun.misc</artifactId>
    <packaging>jar</packaging>
    <name>System Bundle Fragment exporting sun.misc</name>

    <description>This bundle extends the System Bundle export list with the sun.misc package such that OSGi bundles may refer to Sun's misc implementation without the OSGi framework itself to provide it in a non-portable way.</description>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <forceCreation>true</forceCreation>
                    <archive>
                        <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
                        <manifestEntries>
                            <Export-Package>sun.misc</Export-Package>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>2.5.4</version>
                <executions>
                    <execution>
                        <id>bundle-manifest</id>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>manifest</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <instructions>
                        <Bundle-Category>your.group</Bundle-Category>
                        <Fragment-Host>system.bundle; extension:=framework</Fragment-Host>
                    </instructions>
                </configuration>
            </plugin>

        </plugins>
    </build>

</project>

Запустите mvn clean install на этом POM. Теперь вам нужно сделать фрагмент расходуемым для Tycho, т. е. сделать его доступным через сайт программного обеспечения p2.

К счастью, есть отличный подключаемый модуль Maven, который может помочь в этом: p2-maven-плагин. Вы можете использовать его, чтобы в основном обернуть любой mavenized JAR в пакет OSGi, а затем предоставить его через сайт p2.

Настройте соответствующий 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>
  <groupId>sun-misc-p2</groupId>
  <artifactId>site</artifactId>
  <version>1.0.0</version>
  <packaging>pom</packaging>

  <build>
            <plugins>
                <plugin>
                    <groupId>org.reficio</groupId>
                    <artifactId>p2-maven-plugin</artifactId>
                    <version>1.1.1</version>
                    <executions>
                        <execution>
                            <id>default-cli</id>
                            <configuration>
                                <artifacts>
                                    <!-- specify your depencies here -->
                                    <!-- groupId:artifactId:version -->
                                    <artifact><id>com.lmax:disruptor:3.3.2</id></artifact>
                                    <artifact><id>your.group:your.group.fragment.sun.misc:1.0.0</id></artifact>
                                </artifacts>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.mortbay.jetty</groupId>
                    <artifactId>jetty-maven-plugin</artifactId>
                    <version>8.1.5.v20120716</version>
                    <configuration>
                        <scanIntervalSeconds>10</scanIntervalSeconds>
                        <webAppSourceDirectory>${basedir}/target/repository/</webAppSourceDirectory>
                        <webApp>
                            <contextPath>/site</contextPath>
                        </webApp>
                   </configuration>
                </plugin>
            </plugins>
        </build>
        <pluginRepositories>
            <pluginRepository>
                <id>reficio</id>
                <url>http://repo.reficio.org/maven/</url>
            </pluginRepository>
        </pluginRepositories> 
</project>

Обратите внимание, что я использую этот подключаемый модуль для предоставления LMAX Disruptor (версия 3.3.2, последняя на момент написания, к счастью, доступна в Maven Central).

Запустите mvn p2:site в POM. Это создаст сайт p2, содержащий фрагмент sun.misc по адресу {project-folder}/target/repository.

Этот репозиторий p2, а вместе с ним и фрагмент sun.misc, теперь можно добавить на вашу целевую платформу и, следовательно, использовать в вашей сборке Tycho.

Это должно исправить это, и - чтобы ответить на ваш вопрос, "есть ли какой-либо возможный способ, которым [вы] можете добавить сам [ваш] плагин" - это единственный возможный способ сделать это (я знаю).

Исходники также доступны по адресу https://github.com/newcodeontheblock/eclipse-rcp-with-async-logging. Вся процедура также более подробно описана в этом - моем - сообщение в блоге об использовании асинхронных регистраторов Log4j 2 в Eclipse RCP.

person s.d    schedule 27.10.2015
comment
Фрагмент также доступен в Maven Central: search.maven.org/ - person s.d; 01.08.2017
comment
Это было чрезвычайно полезно. - person wilx; 16.07.2021