You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Karaf Maven Plugin构建的Assembly中部署自定义Jetty Feature?

解决Karaf Maven Plugin无法打包自定义Jetty Feature的配置要点

1. 让Karaf Maven Plugin识别自定义Feature仓库

必须在pom.xml的karaf-maven-plugin配置中,添加本地Feature仓库路径,确保插件能读取到你src/main/feature下的feature.xml。同时要明确指定需要打包的Jetty Feature,还要配置Equinox作为OSGi框架:

<plugin>
    <groupId>org.apache.karaf.tooling</groupId>
    <artifactId>karaf-maven-plugin</artifactId>
    <version>${karaf.version}</version>
    <extensions>true</extensions>
    <configuration>
        <repositories>
            <!-- 本地自定义Feature仓库 -->
            <repository>file:${project.basedir}/src/main/feature</repository>
            <!-- 按需添加官方Karaf特性仓库 -->
            <repository>mvn:org.apache.karaf.features/standard/${karaf.version}/xml/features</repository>
        </repositories>
        <!-- 指定要打包的自定义Jetty Feature -->
        <features>
            <feature>org.eclipse.jetty.feature</feature>
        </features>
        <!-- 配置Equinox为OSGi框架 -->
        <framework>equinox</framework>
        <frameworkVersion>${equinox.version}</frameworkVersion>
    </configuration>
</plugin>

2. 确保Feature.xml依赖配置准确

你的src/main/feature/feature.xml必须完整声明Jetty 11.0.18的所有核心Bundle,每个Bundle的坐标要精准无误:

<feature name="org.eclipse.jetty.feature" version="11.0.18" description="Custom Jetty 11 Feature">
    <bundle>mvn:org.eclipse.jetty/jetty-server/11.0.18</bundle>
    <bundle>mvn:org.eclipse.jetty/jetty-servlet/11.0.18</bundle>
    <bundle>mvn:org.eclipse.jetty/jetty-webapp/11.0.18</bundle>
    <!-- 根据需求添加其他Jetty依赖Bundle -->
</feature>

3. 配置Maven依赖确保Jetty包被拉取

在pom.xml的dependencies中添加自定义Feature的依赖(或直接引入Jetty Bundle),保证Maven能正确解析并下载所需Jar包:

<dependencies>
    <!-- 引用自定义Feature模块(多模块项目场景) -->
    <dependency>
        <groupId>你的项目groupId</groupId>
        <artifactId>你的Feature模块artifactId</artifactId>
        <version>你的版本号</version>
        <type>xml</type>
        <classifier>features</classifier>
    </dependency>
    <!-- 或直接添加Jetty核心Bundle依赖 -->
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-server</artifactId>
        <version>11.0.18</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

4. 绑定Assembly构建到Maven生命周期

需要将Karaf插件的assembly目标绑定到package阶段,确保构建时自动生成包含Feature的Assembly:

<executions>
    <execution>
        <id>assembly</id>
        <phase>package</phase>
        <goals>
            <goal>assembly</goal>
        </goals>
    </execution>
</executions>

5. 适配Equinox与Jetty的兼容性

Jetty 11基于Jakarta EE 9,需确保Equinox版本支持Java 11+,同时补充系统包配置避免依赖冲突:

<configuration>
    <!-- 其他配置 -->
    <systemPackages>
        <package>jakarta.servlet;version=5.0.0</package>
        <package>jakarta.servlet.http;version=5.0.0</package>
        <!-- 添加Jetty依赖的其他系统包 -->
    </systemPackages>
</configuration>

完成以上配置后,重新执行mvn clean install,Jetty相关Jar包会出现在target/assembly的对应目录中。

内容的提问来源于stack exchange,提问作者Frédéric

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:24:51