Не создает папку OSGI-INF

Я новичок в OSGI. У меня возникли проблемы с получением папки OSGI-INF в сгенерированном файле jar. Мне нужно иметь структуру папок, как показано ниже

  • МЕТА-ИНФ
  • ОСГИ-ИНФ
  • Com.mine.cq

Я использую плагин Eclipse и m2e. Когда я запускаю свой проект, я получаю BUILD SUCCESS. И я получаю приведенную ниже структуру папок в этом сгенерированном файле jar.

  • МЕТА-ИНФ
  • Com.mine.cq

Вот мой POM.xml

 <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>com.mine.cq</groupId>
  <artifactId>mineCore</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>mineCore</name>
  <url>http://maven.apache.org</url>

  <properties>
        <file.encoding>utf-8</file.encoding>
    </properties>
   <build>
        <defaultGoal>install</defaultGoal>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <version>1.0-alpha-3</version>
                <executions>
                    <execution>
                        <id>enforce-java</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <requireMavenVersion>
                                    <message>Project must be built with Maven 2.0.7 or higher</message>
                                    <version>2.0.7</version>
                                </requireMavenVersion>
                                <requireJavaVersion>
                                    <message>Project must be compiled with Java 5 or higher</message>
                                    <version>1.5.0</version>
                                </requireJavaVersion>
                            </rules>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>1.4.3</version>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Export-Package>
                            com.mine.cq.mineCore.*
                        </Export-Package>
                        <Import-Package>
                            *;resolution:=optional,
                            javax.servlet;version=2.4,
                            javax.servlet.http;version=2.4
                        </Import-Package>
                        <Embed-Dependency>   
                        </Embed-Dependency>
                        <Embed-Transitive>true</Embed-Transitive>
                        <Include-Resource>{maven-resources}</Include-Resource>
                        <Sling-Bundle-Resources>/var/classes</Sling-Bundle-Resources>
                    </instructions>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-scm-plugin</artifactId>
                <version>1.0</version>
                <configuration>
                    <goals>install</goals>
                </configuration>
            </plugin>
        </plugins>
    </build>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

Почему папка OSGI-INF отсутствует в файле .jar? Мне нужно установить некоторую информацию в папку OSGO-INF, так как я должен зарегистрировать свой компонент как службу OSGI. Пожалуйста, помогите мне сделать это.


person Anderson    schedule 29.06.2013    source источник
comment
При экспорте файла JAR вы выбираете папку OSGI-INF. Он не выбран по умолчанию.   -  person Rohit Jain    schedule 29.06.2013
comment
В сгенерированном банке нет папки OSGI-INF. Как я могу выбрать папку osgi-inf? Нужно ли добавлять плагины в pom.xml для создания папки OSGI-INF?   -  person Anderson    schedule 29.06.2013


Ответы (2)


Несмотря на то, что я довольно поздно, я опубликую свои 2 цента по этой проблеме для дальнейшего использования.

Как уже указывалось, вы можете настроить «упаковку» пакета на «jar», если будете следовать инструкциям, приведенным в Документация по плагину пакета Maven.

Есть только небольшая загвоздка: с этой конфигурацией вам нужно явно добавить <exportScr>true</exportScr> внутри конфигурации плагина, чтобы правильно создать xml-файл SCR (также не забудьте настроить местоположение манифеста, поскольку в документации эта часть отсутствует!).

Вы можете увидеть пример здесь (он полностью отличается от вашего, но я предполагаю, что вы можете легко уменьшить его в своем коде, если вам все еще интересно):

<?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>
    <groupId>com.massimobono.karaf.examples</groupId>
    <artifactId>user-example</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <packaging>jar</packaging>    
    <build>
        <plugins>
            <plugin>
                <!-- Here you specifiy that you want to use the manifest file generated by maven bundle plugin -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.0.2</version>
                <configuration>
                    <archive>
                        <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
                    </archive>
                </configuration>
            </plugin>
            <!-- Here you generate the whole MANIFEST by using maven-bundle-plugin -->
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>3.2.0</version>
                <extensions>true</extensions> <!-- make sure this is present -->
                <executions>
                    <execution>
                        <id>bundle-manifest</id>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>manifest</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <manifestLocation>${project.build.outputDirectory}/META-INF/</manifestLocation> <!-- make sure this is present! in the example of maven bundle plugin documentation, this piece is NOT present -->
                    <exportScr>true</exportScr> <!-- be sure to add this line as well -->
                    <supportedProjectTypes>
                        <supportedProjectType>jar</supportedProjectType>
                        <supportedProjectType>bundle</supportedProjectType>
                        <supportedProjectType>war</supportedProjectType>
                    </supportedProjectTypes>
                    <instructions>
                        <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
                        <_dsannotations>*</_dsannotations>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
            <version>6.0.0</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.osgi/org.osgi.service.component.annotations -->
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.service.component.annotations</artifactId>
            <version>1.3.0</version>
        </dependency>


    </dependencies>

</project>
person Koldar    schedule 22.11.2016

Ваш pom.xml должен иметь тип упаковки «bundle», а не «jar». Если вы хотите, чтобы тип упаковки был «jar», используйте это:

http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html#ApacheFelixMavenBundlePlugin%28BND%29-ДобавлениеметаданныхOSGвсуществующиепроектыбезизменениятипаупаковки

РЕДАКТИРОВАТЬ: О! Это только проблема один. Другая проблема заключается в том, что я не думаю, что вы можете сгенерировать OSGI-INF с помощью плагина maven-bundle-plugin. Вам нужно создать папку OSGI-INF самостоятельно в src/main/resources или использовать плагин, который генерирует OSGI-INF.

Плагин maven-scr может генерировать OSGI-INF, но это полезно, только если вы используете SCR. Плагин Maven SCR - не создает папку OSGI-INF

person Sheena Artrip    schedule 30.06.2013
comment
я получаю ошибку сборки проекта, неизвестную ошибку пакета упаковки, когда я перехожу в пакет вместо jar. - person Anderson; 30.06.2013
comment
stackoverflow .com/questions/9732051/ Кроме того, вы можете использовать другой метод, который позволяет использовать тип упаковки «jar». - person Sheena Artrip; 30.06.2013
comment
элемент упаковки должен быть пакетом, так как это пакет osgi. я не получил никакой ошибки в pom.xml. После команды mvn install я получаю сообщение об ошибке Не удалось выполнить цель org.apache.maven.plugins:maven-surefire-plugin:2.15:test (тест по умолчанию) в проекте cqcore: Execution default-test цели org.apache.maven .plugins:maven-surefire-plugin:2.15:сбой теста: отсутствовал требуемый класс при выполнении org.apache.maven.plugins:maven-surefire-plugin:2.15:test: org/apache/commons/lang3/StringUtils Не могли бы вы подскажите как решить эту проблему? - person Anderson; 02.07.2013