当前位置: 首页 > 知识库问答 >
问题:

用maven-assembly-plugin构建包含依赖项的OSGi包

任昊苍
2023-03-14
<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>
    <artifactId>logstat</artifactId>
    <packaging>bundle</packaging>
    <name>Log Stat Demo</name>
    <version>1.0</version>
    <groupId>org.test</groupId>
    <dependencies>
        <dependency>
            <groupId>org.jruby</groupId>
            <artifactId>yecht</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-json</artifactId>
            <version>2.2.1</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>2.4.0</version>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Export-Package>activator.*,service.*,impl.*</Export-Package>
                        <Bundle-Activator>activator.Activator</Bundle-Activator>
                    </instructions>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>activator.Activator</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-my-jar-with-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
Manifest-Version: 1.0
Bnd-LastModified: 1392281245886
Build-Jdk: 1.6.0_45
Built-By: myname
Bundle-Activator: activator.Activator
Bundle-ManifestVersion: 2
Bundle-Name: test
Bundle-SymbolicName: org.wiperdog.logstat
Bundle-Version: 1.0.0
Created-By: Apache Maven Bundle Plugin
Export-Package: activator;uses:="org.osgi.framework";version="1.0.0",ser
 vice;version="1.0.0",impl;uses:="org.osgi.framework,service";version="1
 .0.0"
Import-Package: org.jruby.embed;version="[1.7,2)",org.jruby.embed.osgi;v
 ersion="[1.7,2)",org.osgi.framework;version="[1.6,2)"
Tool: Bnd-2.1.0.20130426-122213
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Build-Jdk: 1.6.0_45
Main-Class: activator.Activator

那么,我该如何配置呢?

共有1个答案

花永昌
2023-03-14

这很简单,在您的配置中添加以下内容:

<Embed-Dependency>dependencies</Embed-Dependency>

基本上就是这样。完整的文档可以在Felix-Maven-Bundle-Plugin上找到,关于BND如何工作的更多细节可以在aqute上找到

关于,包括。如果它是您的应用程序所需要的,并且大多是隐藏的,那么嵌入这些依赖项可能是一个有效的解决方案。如果您正在重用这些东西,您应该考虑创建一个“shaded”bundle

 类似资料:
  • 我是OSGi的新手。我正在使用Apache Felix。我已经构建了一个捆绑包,并且具有依赖性。当我尝试使用启动它会给我这个错误。 org . OSGi . framework . bundle exception:无法解析lk . ucsc . research . belly runner[20](R 20.0):缺失需求[lk . ucsc . research . belly runner

  • 我正在开发一个Java项目,使用maven作为依赖项管理器/构建工具。我当前在将依赖项的依赖项解析到正确版本时遇到问题。 有问题的依赖项称为JasperReports-Functions-6.1.0.jar,它不是托管在maven repo中,而是以jar形式提供的。 如何强制jar依赖项使用子依赖项的某个版本?

  • 我使用maven和maven-jar-plugin和maven-assembly-plugin构建了项目的zip,包括项目jar及其依赖项。

  • 我将给你一个关于我的文件的概述: 设置。分级: Build.Gradle: 注意:我以为没有将依赖项添加到类路径中,但我不确定这一点。但是,我希望Intellij将依赖项添加到类路径中(或者在清单文件中声明) 但是,这会创建一个zip/tar,其中包含一个执行脚本和一个bin文件夹,这不是我的本意。 所以我开始在谷歌上搜索了好几个小时,但我找不到解决问题的方法。