Проблема упаковки пакетов Maven, известная как MNG-4338 - PullRequest
6 голосов
/ 06 сентября 2011

У меня проблемы с плагином maven-bundle-plugin:

Я хочу развернуть свой проект как пакет osgi, поэтому я использую упаковку как пакет.Но похоже, что пом не знает, как упаковка в комплекте.Здесь вы можете увидеть мой pom.xml:

<project ...>...
    <packaging>bundle</packaging>
<version>1.0.0</version>

<name>Simple CXF project using spring configuration</name>

<properties>
    <cxf-version>2.4.2</cxf-version>
</properties>

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <version>2.3.5</version>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
                        <Bundle-Name>${project.name}</Bundle-Name>
                        <Bundle-Version>${project.version}</Bundle-Version>
                        <Export-Package>demo.hw.server</Export-Package>
                        <Bundle-Activator>demo.hw.server.Activator</Bundle-Activator>
                        <Require-Bundle>org.apache.cxf.bundle</Require-Bundle>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

<dependencies>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>${cxf-version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http</artifactId>
        <version>${cxf-version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.osgi.core</artifactId>
        <version>1.4.0</version>
    </dependency>
</dependencies>

</project>

Говорят, эта ошибка уже исправлена ​​(http://jira.codehaus.org/browse/MNG-4338),, но мне кажется, что нет. Кто-нибудь сталкивался с этой проблемой раньше и нашелРешение?

Сообщение об ошибке выглядит следующим образом:

[INFO] Scanning for projects...
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]   
[ERROR]   The project com.talend.liugang.cxf:java_first_jaxws:1.0.0 (C:\Users\Andreas\workspace\java_first_jaxws\pom.xml) has 1 error
[ERROR]     Unknown packaging: bundle @ line 7, column 13
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException

С уважением, saen

Ответы [ 3 ]

14 голосов
/ 06 сентября 2011

Учитывая приведенный выше пример pom, вы должны просто переместить maven-bundle-plugin за пределы узла <pluginManagement>.<pluginManagement> обычно используется в целях наследования в родительских помонах.Тип упаковки пакета предоставляется maven-bundle-plugin (поэтому вам нужно <extensions>true</extensions>), поэтому в этом случае этот плагин должен быть вне <pluginManagement>.

<project ...>...
    <packaging>bundle</packaging>
    <version>1.0.0</version>

    <name>Simple CXF project using spring configuration</name>

    <properties>
        <cxf-version>2.4.2</cxf-version>
    </properties>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.5</source>
                        <target>1.5</target>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>

        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <version>2.3.5</version>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
                        <Bundle-Name>${project.name}</Bundle-Name>
                        <Bundle-Version>${project.version}</Bundle-Version>
                        <Export-Package>demo.hw.server</Export-Package>
                        <Bundle-Activator>demo.hw.server.Activator</Bundle-Activator>
                        <Require-Bundle>org.apache.cxf.bundle</Require-Bundle>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>${cxf-version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>${cxf-version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.osgi.core</artifactId>
            <version>1.4.0</version>
        </dependency>
    </dependencies>

</project>
1 голос
/ 06 марта 2013

Да, проблема в том, что org.apache.felix должен находиться за пределами .

0 голосов
/ 20 января 2012

Я вижу похожую проблему. Мне приходит в голову, что это происходит, когда идентификатор группы заканчивается, как начинается идентификатор артефакта. Я пытаюсь связать что-то подобное:

<groupId>org.slf4j</groupId>
<artifactId>slf4j-api.plugin</artifactId>

slf4j из идентификатора артефакта удаляется и заканчивается как org.slf4j.api.plugin в манифесте как символическое имя.

...