Я использую ServiceMix 6.1.0 (содержащий Karaf 3.0.5), и у меня есть проект Maven. Я хочу создать архив Karaf (.kar), используя karaf-maven-plugin
.Извлечение всех зависимостей с помощью модуля Karaf Maven и создание архива Karaf
Я понял цель использования архива Karaf: получение всех зависимостей, чтобы .kar можно было развернуть в автономной среде. Ну ... я думал, что понял ... После создания .kar и развернув его, я получаю сообщение об ошибке:
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
:
<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
генерироваться:
<?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
(только зависимостей):
<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
для загрузки каждые зависимостей?