首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Karaf插件检索每个依赖项并创建Karaf存档

使用Karaf插件检索每个依赖项并创建Karaf存档
EN

Stack Overflow用户
提问于 2016-01-18 17:00:10
回答 1查看 1.2K关注 0票数 1

我使用的是ServiceMix 6.1.0 (包含Karaf3.0.5),我有一个Maven项目。我想使用.kar创建一个Karaf ( karaf-maven-plugin )。

我理解使用Karaf的目标:检索每个依赖项,以便可以在脱机环境中部署.kar。好吧..。我以为我已经明白..。在创建和部署.kar之后,我得到了一个错误:

代码语言:javascript
复制
Error executing command: Can't install feature karafMavenPlugin/0.0.0:
Could not start bundle mvn:org.testng/testng/6.8.8 in feature(s) karafMavenPlugin-0.0.1-SNAPSHOT: 
Unresolved constraint in bundle org.testng [371]: 
Unable to resolve 371.0: 
missing requirement [371.0] osgi.wiring.package; (osgi.wiring.package=org.junit)

下面是pom.xml

代码语言:javascript
复制
<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">
  <modelVersion>4.0.0</modelVersion>
  <groupId>test</groupId>
  <artifactId>karafMavenPlugin</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>kar</packaging>
  <name>TestKarafMavenPlugin</name>

    <build>
        <plugins>
            <!-- Plugin to create .kar -->
            <plugin>
                <groupId>org.apache.karaf.tooling</groupId>
                <artifactId>karaf-maven-plugin</artifactId>
                <version>3.0.5</version>
                <extensions>true</extensions>
                <configuration>
                    <aggregateFeatures>true</aggregateFeatures>
                    <includeTransitiveDependency>true</includeTransitiveDependency>
                </configuration>
            </plugin>
        </plugins>
        <pluginManagement>
            <plugins>
                <!--This plugin's configuration is used to store Eclipse m2e settings 
                    only. It has no influence on the Maven build itself. -->
                <plugin>
                    <groupId>org.eclipse.m2e</groupId>
                    <artifactId>lifecycle-mapping</artifactId>
                    <version>1.0.0</version>
                    <configuration>
                        <lifecycleMappingMetadata>
                            <pluginExecutions>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>
                                            org.apache.karaf.tooling
                                        </groupId>
                                        <artifactId>
                                            karaf-maven-plugin
                                        </artifactId>
                                        <versionRange>
                                            [3.0.5,)
                                        </versionRange>
                                        <goals>
                                            <goal>
                                                features-generate-descriptor
                                            </goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <ignore></ignore>
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.8.8</version>
        </dependency>
    </dependencies>
</project>

下面是生成的feature.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.1" name="karafMavenPlugin">
    <feature name="karafMavenPlugin" version="0.0.1-SNAPSHOT" description="TestKarafMavenPlugin">
        <bundle>mvn:org.testng/testng/6.8.8</bundle>
        <bundle>wrap:mvn:org.beanshell/bsh/2.0b4</bundle>
        <bundle>mvn:com.beust/jcommander/1.27</bundle>
    </feature>
</features>

为什么没有检索JUnit依赖项?

我的猜测是,karaf-maven-plugin不会在pom.xml中检索依赖项,即<optional><provided>。实际上,JUnit是TestNG的依赖项,下面是TestNG的pom.xml (唯一的依赖项):

代码语言:javascript
复制
<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/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <groupId>org.testng</groupId>
  <artifactId>testng</artifactId>
  <packaging>jar</packaging>
  <name>TestNG</name>
  <version>6.8.8</version>
  <description>TestNG is a testing framework.</description>
  <url>http://testng.org</url>

  <dependencies>
    <dependency>
      <groupId>org.apache.ant</groupId>
      <artifactId>ant</artifactId>
      <version>1.7.0</version>
      <optional>true</optional>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <optional>true</optional>
    </dependency>

    <dependency>
      <groupId>org.beanshell</groupId>
      <artifactId>bsh</artifactId>
      <version>2.0b4</version>
<!--
      <scope>provided</scope>
-->
    </dependency>

    <dependency>
      <groupId>com.google.inject</groupId>
      <artifactId>guice</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.beust</groupId>
      <artifactId>jcommander</artifactId>
      <version>1.27</version>
    </dependency>
      <dependency>
        <groupId>org.yaml</groupId>
        <artifactId>snakeyaml</artifactId>
        <version>1.12</version>
      <optional>true</optional>
      </dependency>
  </dependencies>    
</project>

我们可以看到,每个不是<optional>而不是<provided>的依赖项都由karaf-maven-plugin检索。

所以..。我错了吗?这是一种预期的行为吗?如果是这样的话,是否有办法向karaf-maven-plugin指示下载的每个依赖项?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-24 16:42:01

如有关作用域的maven文档中所述:

提供 这与编译非常相似,但表示您希望JDK或容器在运行时提供依赖关系。例如,在为构建web应用程序时,您将将对Servlet和相关Java的依赖设置为提供的范围,因为web容器提供了这些类。此范围仅在编译和测试类路径上可用,且不可传递。

“提供”不是传递性的:当通过api请求maven依赖项时,不会检索所提供的依赖项。

因此,为了使用karaf plugin,您必须在pom中显式地添加此依赖项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34860149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档