我目前正在将maven
托管捆绑包部署到felix
框架中,我想为部署过程创建一个maven
项目,并希望使用maven插件自动执行所有过程。< / p>
使用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>
但<includeArtifactIds>
中提到的所有捆绑包都是静态的,我们可能会在使用bundle:update
或felix:update
更新它们时遇到问题。
如何将捆绑包部署到felix
或karaf
,与在felix:deploy
内部正在运行felix
,但使用maven
进行调用?
答案 0 :(得分:0)
不确定我是否完全理解您的要求,但对于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安装bundle。
编辑:
将所有这些配置一次性使用的另一种方法是使用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。