2012-07-14 62 views
0

据我所知,apache karaf的dev:watch命令应该可以帮助开发osgi捆绑包,这样我就不必每次手动更新捆绑包到该软件包的源代码...apache karaf dev:监视命令不起作用

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

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

然后我开始使用osgi:start <id of my bundle>

然后我开始监测此包using dev:watch --start <id of my bundle>

Karaf告诉我,捆绑:

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命令安装的软件包它监视我的包。 好的。

然后,我想测试如果我更改了源代码并重新构建了我的包,那么包是否会自动更新。 因此,我更改了激活器类的System.out.println(),并使用mvn clean install构建了我的重建包。

不应该捆绑更新自己呢?当我看看karaf控制台时,我发现没有任何更改,直到我使用osgi手动更新该软件包:更新(我想避免使用dev:watch)...我在这里做错了什么?

回答

3

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

0

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

+0

嗨,我如何能配置明确?目标文件夹中生成的Jar被称为bla.blubb.1.0-SNAPSHOT.jar,所以我猜这是一个快照版本?! – Moonlit 2012-07-15 07:30:51

+0

是的,这听起来像一个快照版本,所以它应该工作。你使用mvn install吗?安装将jar部署到本地maven仓库中。这是必要的,因为karaf只监视本地回购站而不是目标文件夹。你还应该检查你是否使用maven repo的默认位置或者在karaf中配置你的特殊回购位置。 – 2012-07-15 21:18:20

+0

是的,我正在使用mvn安装来构建包。 maven项目被放到C:/users/user/.m2/repository中,我也可以找到jar。之后,我使用“osgi:install ”安装软件包,并指示karaf使用“dev:watch ”监视软件包。就这样。在我更改后的捆绑项目中再次调用mvn clean update之后,捆绑应该立即自动更新(就像我会调用osgi:update一样)是否正确?还是我缺少任何中间步骤? – Moonlit 2012-07-15 23:08:25

0

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

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

Maven的是与确定的,但BundleWatcher没有。 工作后更改为D:/m2repo(不适用于unix风格的正斜杠)。