对于使用maven-捆插件的所有资源( for all resources usin

2019-09-19 15:42发布

作为一项临时措施,以便能够迅速地过渡到OSGi的,我需要创建与我的所有库一个罐子。 我所做的就是把所有的jar库中的src / main /资源,以便他们在创建罐子的根目录的最后。 我遇到的问题是告诉Maven的捆绑,插件的所有包导出的罐子。 所以基本上,我要揭露我的所有库到其他OSGi包

这是我在POM尝试的第一件事

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Export-Package>*</Export-Package>
                    <Bundle-Name>${project.artifactId}</Bundle-Name>
                    <Bundle-Version>${project.version}</Bundle-Version>
                </instructions>
            </configuration>
        </plugin>
    </plugins>
</build>`

我试图出口都出现了。 但似乎是被导出这样的唯一的事情是两个OSGi的依赖关系,而不是在资源罐子

我有过百库,所以我试图找到一个自动化的方式来填充<Export-Package>指令,而无需手工添加每个librarie的包。 不知怎的,日食做它的插件开发环境,但我需要为此使用maven。 这是可能的捆绑插件呢? 加分如果罐子被添加到<Bundle-ClassPath>

Answer 1:

您必须添加瓶当在你的pom.xml依赖关系,然后使用下面的配方为您的maven-捆插件在<建立>标签:

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <extensions>true</extensions>
    <configuration>
        <manifestLocation>META-INF</manifestLocation>
        <instructions>
            <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
            <Bundle-Version>${project.version}</Bundle-Version>
            <Export-Package>*</Export-Package>
            <Bundle-Activator>your.activator.package.Activator</Bundle-Activator>
            <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
            <Embed-Directory>target/dependency</Embed-Directory>
            <Embed-StripGroup>true</Embed-StripGroup>
            <Embed-Transitive>true</Embed-Transitive>
        </instructions>
    </configuration>
</plugin>

<plugin>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
        </execution>
    </executions>
</plugin>

也将添加以下,使一切有M2E工作:

请参阅: Maven的依赖关系的插件(目标“复制依赖性”,“解压”)不支持M2E

<pluginManagement>
    <plugins>
        <!-- Ignore/Execute plugin execution -->
    <plugin>
            <groupId>org.eclipse.m2e</groupId>
            <artifactId>lifecycle-mapping</artifactId>
            <version>1.0.0</version>
            <configuration>
                <lifecycleMappingMetadata>
                    <pluginExecutions>
                        <!-- copy-dependency plugin -->
                        <pluginExecution>
                <pluginExecutionFilter>
                                <groupId>org.apache.maven.plugins</groupId>
                                <artifactId>maven-dependency-plugin</artifactId>
                                <versionRange>[1.0.0,)</versionRange>
                                <goals>
                                    <goal>copy-dependencies</goal>
                                </goals>
                            </pluginExecutionFilter>
                            <action>
                                <ignore />
                            </action>
                        </pluginExecution>
                    </pluginExecutions>
                </lifecycleMappingMetadata>
            </configuration>
        </plugin>
    </plugins>
</pluginManagement>

还添加以下,使其与Eclipse的PDE(摘自工作阿帕奇菲利克斯网站 ):

<profiles>
    <profile>
        <activation>
            <property>
                <name>m2e.version</name>
            </property>
        </activation>
        <properties>
            <osgi-version-qualifier>qualifier</osgi-version-qualifier>
        </properties>
        <build>
            <pluginManagement>
                <plugins>
                    <plugin>
                        <groupId>org.apache.felix</groupId>
                        <artifactId>maven-bundle-plugin</artifactId>
                        <configuration>
                            <!-- PDE does not honour custom manifest location -->
                            <manifestLocation>META-INF</manifestLocation>
                        </configuration>
                    </plugin>
                </plugins>
            </pluginManagement>
        </build>
    </profile>
</profiles>


Answer 2:

根据该文件的捆绑插件,您可以使用{local-packages} ,这将扩大到所有项目的包。

然而,这是一个非常糟糕的主意! 想想看一秒钟,你是说在你的捆绑一切都应该是公开可见的API。 这意味着你必须保持所有这些软件包,请务必仔细发展他们,并正确版本等,基本上你不会被模块化。

理想的任何OSGi包应该是尽可能少的包导出为可能



Answer 3:

我觉得这是不可能的。 这些罐子需要单独在Maven回购能够通过将它们设为库项目依赖建立一个“库项目”; 否则罐子不会在类路径。 这样做的一个很好的参考是此页



文章来源: for all resources using maven-bundle-plugin