【问题标题】:karaf-felix custom distribution using maven使用 maven 的 karaf-felix 自定义分发
【发布时间】:2015-07-13 09:31:02
【问题描述】:

我目前正在将maven 托管捆绑包部署到felix 框架中,我想为部署过程创建一个maven 项目,并希望使用maven 插件自动化所有过程。

使用maven-dependency-plugin,我们可以以某种方式自动化部署过程。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.8</version>
     <executions>
         <execution>
             <id>unpack-felix</id>
             <phase>compile</phase>
             <goals>
                 <goal>unpack-dependencies</goal>
             </goals>
             <configuration>
                 <includeArtifactIds>org.apache.felix.ipojo.distribution.quickstart</includeArtifactIds>
                 <outputDirectory>${project.build.directory}/tmp</outputDirectory>
             </configuration>
         </execution>
         <execution>
             <id>copy-bundles</id>
             <phase>package</phase>
             <goals>
                 <goal>copy-dependencies</goal>
             </goals>
             <configuration>
                 <includeArtifactIds>
                     sample.maven.bundle1,
                     sample.maven.bundle2,
                     .
                     .
                     sample.maven.bundleN
                 </includeArtifactIds>
                 <outputDirectory>${project.build.directory}/bundle</outputDirectory>
             </configuration>
         </execution>
     </executions>
</plugin>

但是&lt;includeArtifactIds&gt; 中提到的所有捆绑包都是静态的,使用bundle:updatefelix:update 更新它们可能会遇到问题。

如何将捆绑包部署到felixkaraf,就像在felix 中运行felix:deploy 一样,但使用maven 调用?

【问题讨论】:

    标签: java maven apache-felix apache-karaf


    【解决方案1】:

    我不确定我是否完全理解您的要求,但对于 Karaf,您有特征描述符。基本上是一个 xml 文件,它告诉功能解析器哪些捆绑包要一起安装,或者可能需要哪些其他功能作为先决条件。

    例如下面的feature.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <features name="myfeature" xmlns="http://karaf.apache.org/xmlns/features/v1.0.0">
    
        <repository>mvn:org.apache.camel.karaf/apache-camel/2.15.0/xml/features</repository>
    
        <feature name='myfeature' version="1.0">
            <bundle>mvn:my.group.id/sample.maven.bundle1/1.0</bundle>
            <bundle>mvn:my.group.id/sample.maven.bundle2/1.0</bundle>
            <bundle>mvn:my.group.id/sample.maven.bundle3/1.0</bundle>
            <bundle>mvn:my.group.id/sample.maven.bundle4/1.0</bundle>
            ...
            <bundle>mvn:my.group.id/sample.maven.bundleN/1.0</bundle>            
        </feature> 
    
    ...
    </features>
    

    功能很容易在 Karaf 中部署:

    feature:install myfeature
    

    使用正确的 mvn 坐标安装单个包同样简单:

    bundle:install mvn:my.group.id/sample.maven.bundle1/1.0
    

    如果您只想在自己的容器中使用它,则需要将 pax-url-aether 项目添加到您的设置中,它会添加 require mvn-Url 处理程序。使用这个 url-handler 可以从 mvn-coordinates 安装包。

    编辑:

    一次性配置所有这些的另一种方法是使用 karaf-maven-plugin 创建自定义分发。

    <?xml version="1.0" encoding="UTF-8"?>
    <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">
    
    <artifactId>Karaf-Service-Runtime</artifactId>
    <packaging>karaf-assembly</packaging>
    
    ...
    
        <plugin>
            <groupId>org.apache.karaf.tooling</groupId>
            <artifactId>karaf-maven-plugin</artifactId>
            <version>${karaf.version}</version>
            <extensions>true</extensions>
            <configuration>
                    <!-- <startupFeatures/> -->
                    <bootFeatures>
                        <feature>standard</feature>
                        <feature>management</feature>
                        <feature>war</feature>
                        <feature>my-feature</feature>
                    </bootFeatures>
                    <!-- <installedFeatures/> -->
                </configuration>
        </plugin>
    

    另一种方法是使用我为展示创建的东西(需要 Karaf 4.0.0,目前可作为 SNAPSHOT 使用)。 确保您的自定义发行版包含 jolokia 功能,并使用从 maven 插件发送的休息请求安装您的功能。 可能想看看我的showcase

    【讨论】:

    • 您通过使用功能在 karaf 中安装捆绑包已经完成了一半,但仍然需要通过在 karaf 中键入 feature:install myfeature 进行人工交互,我想要的是消除人工交互并使用 maven 执行所有命令只是简单的mvn clean installmvn clean deploy 但你仍然可以编辑你的答案,我希望你能帮助我:)
    • 我找到了您关于使用 karaf 4.0.0.M2 进行自定义分发的电子邮件,即使有答案,我仍然无法使其以正确的方式运行,删除 &lt;feature&gt;standard&lt;/feature&gt; 并手动添加您喜欢的功能。跨度>
    猜你喜欢
    • 2012-03-19
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 2015-06-21
    • 2016-11-21
    • 2016-07-16
    相关资源
    最近更新 更多