我可以将第三方 jar 放在 karaf (任何特定文件夹)中来解决传递依赖关系吗?

2023-11-29

我有各种具有第三方库依赖项的自制项目。 我将它们捆绑到 OSGI 容器中,但无法解决我的项目中的深层依赖关系。 现在我正在寻找 karaf 文件夹,我可以在其中放置我的库,以便捆绑包可以直接访问它们而不是安装它们。

更重要的是我也在使用maven。

编辑: 在遵循您的“功能”解决方案之后,我能够生成包含传递依赖项的清单,但问题是现在它还查找非常常见的 java 文件:例如:下面是相当大的依赖项列表:

bsh -- Cannot be resolved
com.fasterxml.jackson.annotation -- Cannot be resolved
com.fasterxml.jackson.core -- Cannot be resolved
com.fasterxml.jackson.databind -- Cannot be resolved
com.fasterxml.jackson.databind.annotation -- Cannot be resolved
com.fasterxml.jackson.databind.module -- Cannot be resolved
com.gargoylesoftware.htmlunit -- Cannot be resolved
com.gargoylesoftware.htmlunit.util -- Cannot be resolved
com.google.protobuf -- Cannot be resolved
com.ibm.uvm.tools -- Cannot be resolved
com.ibm.websphere.uow -- Cannot be resolved
com.ibm.wsspi.uow -- Cannot be resolved
com.jamonapi -- Cannot be resolved
com.jamonapi.utils -- Cannot be resolved
com.jayway.jsonpath -- Cannot be resolved
com.jcraft.jzlib -- Cannot be resolved
com.mysema.query.types -- Cannot be resolved
com.sun.javadoc -- Cannot be resolved and overwritten by Boot Delegation
com.sun.jdmk.comm -- Cannot be resolved and overwritten by Boot Delegation
com.sun.net.httpserver -- Cannot be resolved and overwritten by Boot Delegation
com.sun.tools.javadoc -- Cannot be resolved and overwritten by Boot Delegation
com.sun.xml.fastinfoset.sax -- Cannot be resolved and overwritten by Boot Delegation
com.sun.xml.fastinfoset.stax -- Cannot be resolved and overwritten by Boot Delegation
com.typesafe.config -- Cannot be resolved
groovy.lang -- Cannot be resolved
groovy.xml -- Cannot be resolved
javassist -- Cannot be resolved
javax.activation from org.apache.felix.framework (0)
javax.annotation from org.apache.felix.framework (0)
javax.crypto from org.apache.felix.framework (0)
javax.crypto.spec from org.apache.felix.framework (0)
javax.ejb -- Cannot be resolved
javax.el -- Cannot be resolved
javax.enterprise.concurrent -- Cannot be resolved
javax.enterprise.context -- Cannot be resolved
javax.enterprise.context.spi -- Cannot be resolved
javax.enterprise.event -- Cannot be resolved
javax.enterprise.inject -- Cannot be resolved
javax.enterprise.inject.spi -- Cannot be resolved
javax.enterprise.util -- Cannot be resolved

回答你的问题:你可以将所有依赖包放入 $KARAF_HOME/deploy 文件夹中,Karaf 将为你部署它们。

然而,这不是很方便,因为它是一个手动过程并且不是由 Maven 驱动的。相反,看看卡拉夫的概念特征存储库。您可以使用Karaf Maven 插件为您的捆绑包及其(传递)依赖项创建功能存储库。如果您需要将应用程序作为单个工件发布,则可以使用相同的插件来创建 KAR 存档,这是一个 zip 文件,其中包含功能存储库和独立部署单元中所需的依赖项。

首先将模板 feature.xml 文件放入src/main/feature:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<features xmlns="http://karaf.apache.org/xmlns/features/v1.3.0" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.3.0 http://karaf.apache.org/xmlns/features/v1.3.0"
        name="My feature">
    <feature name="${project.artifactId}" version="${project.version}" description="Describe feature here">
         <!-- Add "self" to the list of dependencies -->
         <bundle>mvn:${project.groupId}/${project.artifactId}/${project.version}</bundle>
    </feature>
</features>

然后设置插件以根据您的 Maven 依赖项填充功能模板:

<plugin>
    <groupId>org.apache.karaf.tooling</groupId>
    <artifactId>karaf-maven-plugin</artifactId>
    <configuration>
        <includeTransitiveDependency>true</includeTransitiveDependency>
    </configuration>
    <executions>
        <execution>
            <id>generate-features-descriptor</id>
            <goals>
                <goal>features-generate-descriptor</goal>
            </goals>
        </execution>
    </executions>
</plugin>

构建项目将在本地 Maven 存储库中与捆绑包一起创建一个额外的 Maven 工件:xxx-features.xml 您可以使用以下命令让本地 Karaf 知道您的功能存储库feature:repo-add命令。然后添加您的功能feature:install命令。这将启动您的包及其所有声明的(可传递的)Maven 依赖项。

EDIT:

正如您在评论中提到的,您的一些(全部?)依赖项是普通 JAR,而不是 OSGi 捆绑包,可能您的情况会更好嵌入使用 maven-bundle-plugin 将这些非 OSGi 依赖项放入您自己的包中。但这可能相当乏味。大多数非 OSGi JAR 都有包导入,这些包导入要么在运行时根本不使用,要么不在您的特定使用场景中使用。为了避免将 OSGi 依赖项列表扩展到传递性 Maven 依赖项列表之外,您必须防止将这些“继承”包添加到您自己的包的 MANIFEST 中的包导入列表中。例如,我有一个使用 httl 模板库的包,它又依赖于 Javassist。 OSGi 包也不是。因此,我嵌入了两者并禁止导入在 httl 或 javassist 代码中声明但在运行时不需要的包的导入:

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <extensions>true</extensions>
    <configuration>
        <instructions>
            <Embed-Dependency>*;scope=compile|runtime;inline=false;artifactId=httl|javassist</Embed-Dependency>
            <Embed-Transitive>false</Embed-Transitive>
            <Import-Package>
                !com.alibaba.*,
                !com.thoughtworks.*,
                !javassist.*,
                !net.htmlparser.*,
                !org.apache.commons.logging.*,
                !org.codehaus.jackson.*,
                !org.joda.convert.*,
                !com.sun.jdi.*,
                !javax.servlet.*,
                *
            </Import-Package>
        </instructions>
    </configuration>
</plugin>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以将第三方 jar 放在 karaf (任何特定文件夹)中来解决传递依赖关系吗? 的相关文章

  • 如何将 Java 赋值表达式转换为 Kotlin

    java中的一些东西就像 int a 1 b 2 c 1 if a b c System out print true 现在它应该转换为 kotlin 就像 var a Int 1 var b Int 2 var c Int 1 if a
  • 如何在一行中将字符串数组转换为双精度数组

    我有一个字符串数组 String guaranteedOutput Arrays copyOf values values length String class 所有字符串值都是数字 数据应转换为Double QuestionJava 中
  • 我需要在 Spring 中检查每个控制器中的有效会话吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 假设在 Spring Mvc 的 Web 应用程序中 我们是否需要检查每个控制器或 jsps 中的有效会话 我该如何解决 MVC 中的
  • Java程序中的数组奇怪的行为[重复]

    这个问题在这里已经有答案了 我遇到了这个 Java 程序及其以意想不到的方式运行 以下程序计算 int 数组中元素对之间的差异 import java util public class SetTest public static void
  • 线程自动利用多个CPU核心?

    假设我的应用程序运行 2 个线程 例如渲染线程和游戏更新线程 如果它在具有多核 CPU 当今典型 的移动设备上运行 我是否可以期望线程在可能的情况下自动分配给不同的核心 我知道底层操作系统内核 Android linux内核 决定调度 我的
  • 解决错误:日志已在具有多个实例的atomikos中使用

    我仅在使用atomikos的实时服务器上遇到问题 在我的本地服务器上它工作得很好 我在服务器上面临的问题是 init 中出错 日志已在使用中 完整的异常堆栈跟踪 java lang RuntimeException Log already
  • CXF Swagger2功能添加安全定义

    我想使用 org apache cxf jaxrs swagger Swagger2Feature 将安全定义添加到我的其余服务中 但是我看不到任何相关方法或任何有关如何执行此操作的资源 下面是我想使用 swagger2feature 生成
  • hibernate总是自己删除表中的所有数据

    您好 我正在开发一个 spring mvc 应用程序 它使用 hibernate 连接到存储文件的 mysql 数据库 我有两个方法 一个方法添加我选择的特定文件路径中的所有文件 另一种方法调用查询以返回从 mysql 存储的文件列表 问题
  • 如何在jsp代码中导入java库?

    我有以下jsp代码 我想添加 java io 等库 我怎样才能做到这一点
  • Microsoft Graph 身份验证 - 委派权限

    我可以使用 Microsoft Graph 访问资源无需用户即可访问 https developer microsoft com en us graph docs concepts auth v2 service 但是 此方法不允许我访问需
  • Clip 在 Java 中播放 WAV 文件时出现严重延迟

    我编写了一段代码来读取 WAV 文件 大小约为 80 mb 并播放该文件 问题是声音播放效果很差 极度滞后 你能告诉我有什么问题吗 这是我的代码 我称之为doPlayJframe 构造函数内的函数 private void doPlay f
  • 从 android 简单上传到 S3

    我在网上搜索了从 android 上传简单文件到 s3 的方法 但找不到任何有效的方法 我认为这是因为缺乏具体步骤 1 https mobile awsblog com post Tx1V588RKX5XPQB TransferManage
  • 应用程序关闭时的倒计时问题

    我制作了一个 CountDownTimer 代码 我希望 CountDownTimer 在完成时重新启动 即使应用程序已关闭 但它仅在应用程序正在运行或重新启动应用程序时重新启动 因此 如果我在倒计时为 00 10 分钟 秒 时关闭应用程序
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • Android JNI C 简单追加函数

    我想制作一个简单的函数 返回两个字符串的值 基本上 java public native String getAppendedString String name c jstring Java com example hellojni He
  • Netbeans 8 不会重新加载静态 Thymeleaf 文件

    我通过 Maven 使用 Spring Boot 和 Thymeleaf 当我进行更改时 我似乎无法让 Netbeans 自动重新部署我的任何 Thymeleaf 模板文件 为了看到更改 我需要进行完整的清理 构建 运行 这需要太长的时间
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • 将2-3-4树转换为红黑树

    我正在尝试将 2 3 4 树转换为 java 中的红黑树 但我无法弄清楚它 我将这两个基本类编写如下 以使问题简单明了 但不知道从这里到哪里去 public class TwoThreeFour
  • 休眠以持久保存日期

    有没有办法告诉 Hibernate java util Date 应该持久保存 我需要这个来解决 MySQL 中缺少的毫秒分辨率问题 您能想到这种方法有什么缺点吗 您可以自己创建字段long 或者使用自定义的UserType 实施后User
  • java迭代器内部是如何工作的? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个员工列表 List

随机推荐

  • 尝试安装模块 win32clipboard

    我是 python 新手 我正在尝试安装 win32clipboard 以便能够使用此代码 import win32clipboard win32clipboard OpenClipboard win32clipboard SetClipb
  • 在 .NET 中序列化 System.Drawing.Color

    我对具有 System Drawing Color 成员的类使用了默认的 NET 序列化 该代码现在已被人们使用 我需要向该类添加一个额外的成员 但仍反序列化旧版本 因此 我尝试了执行此操作的标准方法 ISerialized 接口 使用 S
  • 打印出的 html 页面上有水印

    https jsfiddle net dhaileytaha g92gr1sy 3 上面的小提琴有一个打印输出页 我需要在打印输出页上添加水印 我不知道我们该怎么做 js jquery css 或以上都不是 请帮忙 document get
  • CustomPicker 确定和取消按钮的颜色

    我在android项目中有这个custompicker类 public class CustomPickerRenderer PickerRenderer private Context context private IElementCo
  • python元组可以修改吗?

    我正在读入并解析一些数据 基本上 数据是一堆整数和字符串 所以我不能只使用列表来存储数据 每组数据中都会包含一定数量的项目 但有时会丢失一些项目 这是我所拥有的 users list of objects I ll be creating
  • Dockerfile 中是否需要“FROM”子句?

    对于我遇到的所有 Dockerfile 诚然不是很多 它们都使用了FROM基于现有图像的子句 即使它是FROM scratch 这个条款是必须的吗 是否可以有一个没有的 DockerfileFROM条款 这样创建的容器能做些什么吗 EDIT
  • json对象转换为java字符串

    我有这样的 json 文件 我想使用 org simple json 将 json 转换为字符串 header IssuerID 000141 AuthenticationID e07020c0d040a050a0808099 Authen
  • 非常基础的 Java

    我对 Java 很陌生 这是我的代码 public class funk int largest int a int b int c if a gt b if a gt c return a else if b gt c return b
  • 使用 Winform 绘图

    我想获得一些 WinForm Graphics 知识 因此我正在将我的小型 2D 编辑器从 XNA 重写为仅 WinForm Graphics 现在 我为自己的图块集创建了一个新的 UserControl 但正如我所见 Paint方法仅在控
  • Pimpl 习惯用法与纯虚拟类接口

    我想知道什么会让程序员选择 Pimpl 惯用法或纯虚拟类和继承 据我了解 pimpl 习惯用法为每个公共方法和对象创建开销提供了一个显式的额外间接寻址 另一方面 纯虚拟类为继承实现提供了隐式间接 vtable 并且我知道没有对象创建开销 E
  • Laravel 数据透视表中雄辩的 UUID

    这个问题就像这样 laravel uuid 未在查询中显示 然而 这个问题的不同之处在于该表是一个数据透视表id字段使用插入时通过 MySQL 触发器生成的 UUID 我不想为该数据透视表创建另一个模型来为其提供针对类似问题答案的解决方案
  • 结构模式匹配 Python - 匹配集合 / Frozenset

    我一直在尝试 Python 3 10 中的结构模式匹配 但不知道如何让它匹配一组 例如我尝试过 a 1 2 3 match a case set 1 2 3 print matched 我尝试过 a 1 2 3 match a case s
  • Cloud Firestore 不等式运算符异常抖动

    当我在我的 flutter 应用程序中使用 cloud firestore 时 发生了奇怪的异常 EDITED 这是我的代码 Stream
  • Selenium2 WebDriver Ruby => 如何点击隐藏链接

    我在 Ruby 上使用 Selenium 2 WebDriver 如何使用 css 单击隐藏链接 显示 无 该链接是子菜单 当鼠标悬停在菜单上时可见 EDIT Selenium WebDriver Error NoSuchElementEr
  • 访问 Windows Media Player 库 C#

    我试图找出如何在 C 中访问 Windows Media Player 库 我浏览了网络和 SO 发现了很多关于控制 WMP 的文章 不过 我正在尝试访问其图书馆信息 IE 它的曲目名称 文件路径和元数据 是否有一个库可以实现此目的 或者至
  • 如何添加到python字典而不替换

    我当前的代码是category1 name number 但是 如果出现相同的名称 则字典中的值将被新数字替换 我该如何制作 而不是保留原始值 并添加新值 现在给键提供两个值 谢谢 您必须使字典指向列表而不是数字 例如 如果您有两个数字用于
  • Tagsinput 和 typeahead:无法读取未定义的属性“apply”

    当我尝试使用 taginput 和 typeahead 时 我不断收到此错误 html section div class example example typeahead h3 Typeahead h3 div class bs exa
  • 这个 IDisposable 实现正确吗?

    我永远无法记住实现 IDisposable 接口的所有规则 因此我尝试提出一个基类来处理所有这些并使 IDisposable 易于实现 我只是想听听您的意见 这个实现是否可以 或者您是否看到我可以改进的地方 该基类的用户应该从它派生 然后实
  • 对 Java 规范中的泛型子类型感到困惑?

    我正在阅读 java 规范https docs oracle com javase specs jls se10 html jls 4 html jls 4 10 2这句话让我很困惑 D
  • 我可以将第三方 jar 放在 karaf (任何特定文件夹)中来解决传递依赖关系吗?

    我有各种具有第三方库依赖项的自制项目 我将它们捆绑到 OSGI 容器中 但无法解决我的项目中的深层依赖关系 现在我正在寻找 karaf 文件夹 我可以在其中放置我的库 以便捆绑包可以直接访问它们而不是安装它们 更重要的是我也在使用maven