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

如何构建含自定义HttpLogModifier实现的Karate独立Jar包?

解决自定义HttpLogModifier的Karate可执行Jar构建问题

1. 调整源码目录结构

将自定义的DemoLogModifier.java从src/test/java/headers移动到src/main/java/headers——Maven默认不会将测试目录(src/test/java)的类打包到主Jar包中,调整后才能确保自定义类被包含在最终的可执行Jar里。

调整后的目录结构:

$ ls -R .
pom.xml src

./src:
main test

./src/main:
java

./src/main/java:
headers

./src/main/java/headers:
DemoLogModifier.java

./src/test:
java

./src/test/java:
karate-config.js logback-test.xml

2. 修改pom.xml配置

需要配置Maven插件构建包含所有依赖的可执行Fat Jar,同时指定Karate的主类。推荐用maven-shade-plugin处理依赖冲突并打包所有必要类,在pom.xml的<build>标签下添加以下配置:

<build>
    <plugins>
        <!-- 编译插件,根据你的Java版本调整source/target -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.11.0</version>
            <configuration>
                <source>11</source>
                <target>11</target>
            </configuration>
        </plugin>
        <!-- Shade插件构建可执行Fat Jar -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.4.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <!-- 指定Karate主类 -->
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.intuit.karate.Main</mainClass>
                            </transformer>
                        </transformers>
                        <!-- 处理签名文件避免冲突 -->
                        <filters>
                            <filter>
                                <artifact>*:*</artifact>
                                <excludes>
                                    <exclude>META-INF/*.SF</exclude>
                                    <exclude>META-INF/*.DSA</exclude>
                                    <exclude>META-INF/*.RSA</exclude>
                                </excludes>
                            </filter>
                        </filters>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

同时确保pom.xml包含Karate核心依赖:

<dependencies>
    <dependency>
        <groupId>com.intuit.karate</groupId>
        <artifactId>karate-core</artifactId>
        <version>1.4.1</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>com.intuit.karate</groupId>
        <artifactId>karate-junit5</artifactId>
        <version>1.4.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

3. 确保HttpLogModifier实现正确

自定义类需完整实现com.intuit.karate.http.HttpLogModifier接口,示例如下:

package headers;

import com.intuit.karate.http.HttpLogModifier;
import com.intuit.karate.http.HttpRequest;
import com.intuit.karate.http.HttpResponse;

public class DemoLogModifier implements HttpLogModifier {

    @Override
    public String modifyRequestLog(HttpRequest request) {
        // 自定义请求日志掩码逻辑,比如替换敏感字段
        return request.getLog().replaceAll("\"password\":\"[^\"]+\"", "\"password\":\"***\"");
    }

    @Override
    public String modifyResponseLog(HttpResponse response) {
        // 自定义响应日志掩码逻辑
        return response.getLog().replaceAll("\"token\":\"[^\"]+\"", "\"token\":\"***\"");
    }
}

4. 构建并运行可执行Jar

  • 执行打包命令:

    mvn clean package
    

    打包完成后,target目录下会生成格式为{project-name}-{version}-shaded.jar的可执行Fat Jar。

  • 运行Jar并指定Feature文件:

    java -jar target/your-project-name-1.0-SNAPSHOT-shaded.jar path/to/your/feature/file.feature
    
  • 启用自定义日志修改器,需通过系统属性指定全限定类名:

    java -Dkarate.http.log.modifier=headers.DemoLogModifier -jar target/your-project-name-1.0-SNAPSHOT-shaded.jar path/to/your/feature/file.feature
    

关键注意点

  • 自定义类必须放在src/main/java目录,否则Maven打包时不会将其纳入主Jar。
  • 普通Maven Jar仅包含自身代码,用maven-shade-plugin才能将Karate依赖和自定义类打包为单一可执行Jar,解决主类找不到、依赖缺失的问题。

内容的提问来源于stack exchange,提问作者Jon Detert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:48:30