【问题标题】:apache karaf dev:watch command doesn't workapache karaf dev:watch 命令不起作用
【发布时间】:2012-07-14 03:01:34
【问题描述】:

据我所知,apache karaf 的 dev:watch 命令应该有助于开发 osgi 包,这样我就不必在每次更改包的源代码时手动更新包。

我试过这个,一个简单的包,它只包含一个 Activator 类。 我正在使用 maven 进行开发。

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

public class Activator implements BundleActivator {

public void start(BundleContext context) {
    System.out.println("Starting the bundle");
}

public void stop(BundleContext context) {
    System.out.println("Stopping the bundle");
}
}

我使用 karaf 命令安装了包:

osgi:install mvn:my.groupId/my.artifactId

然后我使用 osgi:start <id of my bundle> 启动捆绑包

然后我开始监视这个捆绑包using dev:watch --start <id of my bundle>

Karaf 告诉我它监控我的包。

然后我想测试如果我对源代码进行更改并重建我的包,包是否会自动更新。 所以我更改了激活器类的System.out.println()'s 并使用mvn clean install 构建了我的重建包。

捆绑包现在不应该自行更新吗?当我查看 karaf 控制台时,我看不到任何更改,直到我使用 osgi:update 手动更新捆绑包(我想避免使用 dev:watch)...

我在这里做错了什么?

【问题讨论】:

    标签: java osgi bundle watch


    【解决方案1】:

    几个小时后,我找到了错误的根源。 即使捆绑包已经是 SNAPSHOT 版本,使用 osgi:install mvn:<groupID>/<artifactID> 安装捆绑包是不够的,但您还必须在捆绑包 URL 中使用 <version>osgi:install mvn:<groupID>/<artifactID>/<version>,其中 <version> 对应于版本标签在 pom.xml 中指定。它必须是像“1.0-SNAPSHOT”这样的快照版本。

    【讨论】:

      【解决方案2】:

      maven 版本是 SNAPSHOT 吗? dev:watch 仅适用于快照,因为固定版本预计不会更改。

      【讨论】:

      • 嗨,我该如何明确配置?目标文件夹中生成的 Jar 被称为 bla.blubb.1.0-SNAPSHOT.jar 所以我猜这是一个快照版本?!
      • 是的,这听起来像是一个快照版本,所以它应该可以工作。你用过mvn安装吗?安装将 jar 部署到本地 maven 存储库中。这是必要的,因为 karaf 只关注本地 repo 而不是目标文件夹。您还应该检查是否使用了 maven 存储库的默认位置或在 karaf 中配置您的特殊存储库位置。
      • 是的,我正在使用 mvn install 来构建捆绑包。 maven 项目被放到 C:/users/user/.m2/repository 中,我也可以在其中找到 jar。之后,我使用“osgi:install ”安装捆绑包,并指示 karaf 使用“dev:watch ”监控捆绑包。就这样。在我对已更改的捆绑项目再次调用 mvn clean update 之后,捆绑应该立即更新自身(就像我会在其上调用 osgi:update 一样)是否正确?还是我错过了任何中间步骤?
      • 您所做的一切听起来完全正确。最后一个想法。你在 dev:watch 中使用什么作为 ?你可以试试 dev:watch * 吗?
      • 安装包后,我使用 osgi:list 来获取包的 ID。捆绑包处于“活动”状态,ID 为 113。所以我使用“dev:watch 113”输出“Watched URLs/IDs:113”。当我使用“dev:watch *”时它也不起作用...... :(
      【解决方案3】:

      我遇到了同样的问题。几个小时后,我发现了另一个错误来源。

      我在 Windows 上工作,我的 settings.xml 中有 <localRepository>D:\m2repo</localRepository>

      Maven 对此表示同意,但 BundleWatcher 不同意。 更改为 D:/m2repo 后工作(注意:unix 风格的正斜杠)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-23
        • 2016-02-07
        • 1970-01-01
        • 1970-01-01
        • 2015-12-06
        • 2014-01-08
        • 1970-01-01
        • 2015-06-18
        相关资源
        最近更新 更多