Java KarafMaven插件:将依赖项定义为特性

Java KarafMaven插件:将依赖项定义为特性,java,maven,osgi,provisioning,apache-karaf,Java,Maven,Osgi,Provisioning,Apache Karaf,我试图让KarafMaven插件为我的应用程序生成一个功能文件。应用程序依赖于cxf特性,但我似乎无法让插件生成特性xml来反映这一点 从“我的功能”模块中删除: <dependencies> <dependency> <groupId>com.test.test</groupId> <artifactId>test</artifactId>

我试图让KarafMaven插件为我的应用程序生成一个功能文件。应用程序依赖于cxf特性,但我似乎无法让插件生成特性xml来反映这一点

从“我的功能”模块中删除:

    <dependencies>
        <dependency>
            <groupId>com.test.test</groupId>
            <artifactId>test</artifactId>
        </dependency>
    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.karaf.tooling</groupId>
                    <artifactId>karaf-maven-plugin</artifactId>
                    <version>3.0.3</version>
                    <extensions>true</extensions>
                </plugin>
            </plugins>
        </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.karaf.tooling</groupId>
        <artifactId>karaf-maven-plugin</artifactId>
          <configuration>
            <startLevel>80</startLevel>
        <includeTransitiveDependency>true</includeTransitiveDependency>
        <aggregateFeatures>false</aggregateFeatures>
          </configuration>
        </plugin>
        </plugins>
    </build>

测试
测试
org.apache.karaf.tooling
KarafMaven插件
3.0.3
真的
org.apache.karaf.tooling
KarafMaven插件
80
真的
假的
我的模块中的依赖项:

            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>${slf4j.version}</version>
                <scope>provided</scope>
            </dependency>

            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.17</version>
                <scope>provided</scope>
            </dependency>

            <dependency>
                <groupId>org.osgi</groupId>
                <artifactId>org.osgi.core</artifactId>
                <version>5.0.0</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.osgi</groupId>
                <artifactId>org.osgi.compendium</artifactId>
                <version>5.0.0</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.felix</groupId>
                <artifactId>org.apache.felix.configadmin</artifactId>
                <version>1.8.0</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.2.8</version>
                <scope>provided</scope>
            </dependency>

            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>provided</scope>
            </dependency>

            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-frontend-jaxrs</artifactId>
                <version>${cxf.version}</version>
                <scope>provided</scope>
            </dependency>
            <!-- use extension providers -->
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-rs-extension-providers</artifactId>
                <version>${cxf.version}</version>
                <scope>provided</scope>
            </dependency>
            <!-- use Jackson -->
            <dependency>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-jaxrs</artifactId>
                <version>1.9.13</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-xc</artifactId>
                <version>1.9.13</version>
                <scope>provided</scope>
            </dependency>

            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-transports-http</artifactId>
                <version>${cxf.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-ws-security</artifactId>
                <version>${cxf.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-ws-policy</artifactId>
                <version>${cxf.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-ws-addr</artifactId>
                <version>${cxf.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-frontend-jaxws</artifactId>
                <version>${cxf.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-rs-client</artifactId>
                <version>${cxf.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-transports-http-hc</artifactId>
                <version>${cxf.version}</version>
                <scope>provided</scope>
            </dependency>

            <dependency>
                <groupId>org.apache.cxf.karaf</groupId>
                <artifactId>apache-cxf</artifactId>
                <version>${cxf.version}</version>
                <classifier>features</classifier>
                <type>xml</type>
            </dependency>


            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.3.2</version>
            </dependency>
        </dependencies>

org.slf4j
slf4j api
${slf4j.version}
假如
org.slf4j
slf4j-log4j12
${slf4j.version}
假如
log4j
log4j
1.2.17
假如
org.osgi
org.osgi.core
5.0.0
假如
org.osgi
org.osgi.compendium
5.0.0
假如
org.apache.felix
org.apache.felix.configadmin
1.8.0
假如
org.mybatis
mybatis
3.2.8
假如
朱尼特
朱尼特
4.12
假如
org.apache.cxf
cxf rt前端jaxrs
${cxf.version}
假如
org.apache.cxf
cxf rt rs扩展提供程序
${cxf.version}
假如
org.codehaus.jackson
杰克逊·贾克斯
1.9.13
假如
org.codehaus.jackson
杰克逊xc
1.9.13
假如
org.apache.cxf
cxf rt传输http
${cxf.version}
假如
org.apache.cxf
cxf rt ws-security
${cxf.version}
假如
org.apache.cxf
cxf rt ws策略
${cxf.version}
假如
org.apache.cxf
cxf rt ws地址
${cxf.version}
假如
org.apache.cxf
cxf rt前端jaxws
${cxf.version}
假如
org.apache.cxf
cxf rt rs客户端
${cxf.version}
假如
org.apache.cxf
cxf rt传输http hc
${cxf.version}
假如
org.apache.cxf.karaf
ApacheCXF
${cxf.version}
特征
xml
org.apache.commons
commons-lang3
3.3.2
正如您所看到的,我已经尝试将特性工件定义为编译范围的依赖项,以及commons lang。其他所有内容都按照提供的范围进行了定义

            <dependency>
                <groupId>org.apache.cxf.karaf</groupId>
                <artifactId>apache-cxf</artifactId>
                <version>${cxf.version}</version>
                <classifier>features</classifier>
                <type>xml</type>
            </dependency>


            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.3.2</version>
            </dependency>

org.apache.cxf.karaf
ApacheCXF
${cxf.version}
特征
xml
org.apache.commons
commons-lang3
3.3.2
在生成的features.xml文件中,已注册commons捆绑包,但该功能未注册:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.1" name="feature">
    <feature name="feature" version="0.1-SNAPSHOT" description="test-feature">
        <details>test</details>
        <bundle start-level="80">mvn:com.test.test/test/0.1-SNAPSHOT</bundle>
        <bundle start-level="80">mvn:org.apache.commons/commons-lang3/3.3.2</bundle>
    </feature>
</features>

测试
mvn:com.test.test/test/0.1-SNAPSHOT
mvn:org.apache.commons/commons-lang3/3.3.2
最后,我想说:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.1" name="feature">
    <feature name="feature" version="0.1-SNAPSHOT" description="test-feature">
        <details>test</details>
        <feature version="3.0.2">cxf</feature>
        <bundle start-level="80">mvn:com.test.test/test/0.1-SNAPSHOT</bundle>
        <bundle start-level="80">mvn:org.apache.commons/commons-lang3/3.3.2</bundle>
    </feature>
</features>

测试
cxf
mvn:com.test.test/test/0.1-SNAPSHOT
mvn:org.apache.commons/commons-lang3/3.3.2
轻微更新:
当我将
true
添加到插件配置中时,整个cxf功能被解压到我的features.xml文件中,但是像“cxf”这样的功能依赖项仍然没有出现在生成的功能中。

IMHO这在karaf maven插件中是错误的或没有完成的。我也有同样的问题。 对我来说,我找到的解决方案是在src/main/feature下添加一个feature.xml模板,其中包含我需要的特性和其他文件(configfile)。在您的情况下,应该是这样的:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.1" name="feature">
    <feature name="feature" version="${yourprojectversion}" description="test-feature">
        <feature version="${cxf.version}">cxf</feature>
    </feature>
</features>

cxf
我还使用:
true

请注意,在我的功能模板中,我使用了一些自定义maven属性来处理pom.xml中定义的版本。 最后,您将获得您期望的功能