据我所知,apache karaf的dev:watch命令应该有助于开发osgi bundle,这样我每次更改bundle的源代码时都不需要手动更新bundle ... / p>
我尝试了这个,只有一个简单的包,它只包含一个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()并使用mvn clean install
构建了我的重建捆绑包。
捆绑包现在不应该更新吗?当我看一下karaf控制台时,我看到没有变化,直到我使用osgi:update手动更新捆绑包(我想避免,使用dev:watch)...我在这里做错了什么?
答案 0 :(得分:3)
几个小时后,我发现了错误的来源。
即使捆绑包已经是SNAPSHOT版本,使用osgi:install mvn:<groupID>/<artifactID>
安装捆绑包也是不够的,但您必须在捆绑包URL中使用<version>
:osgi:install mvn:<groupID>/<artifactID>/<version>
,其中<version>
1}}对应于pom.xml中指定的版本标记。它必须是像“1.0-SNAPSHOT”这样的快照版本。
答案 1 :(得分:0)
maven版本是SNAPSHOT吗? dev:watch仅适用于快照,因为固定版本不会发生变化。
答案 2 :(得分:0)
我遇到了同样的问题。几个小时后,我发现了另一个错误来源。
我在Windows上工作,我的settings.xml中有<localRepository>D:\m2repo</localRepository>
Maven没关系,但BundleWatcher没有。
在更改为D:/m2repo
之后工作(通知:unix样式的正斜杠)。