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

将Spring Boot+Activiti应用迁移至Java 10的模块依赖冲突问题求助

解决Spring Boot + Activiti迁移Java 10时的模块拆分包冲突问题

这些错误都是Java 9+模块系统(JPMS)中典型的**拆分包(Split Package)**问题——同一个Java包被多个模块(或模块与未命名模块)同时导出,这违反了JPMS的模块化规则。下面是针对你遇到的问题的具体解决方案:


1. 解决org.apache.commons.logging包冲突

Spring Boot 2.0+已经默认使用spring-jcl作为日志桥接实现,而Activiti 6.0.0的starter依赖可能引入了jcl-over-slf4j,两者都提供了org.apache.commons.logging相关包,导致冲突。

你需要在Activiti的依赖中排除jcl-over-slf4j,统一使用Spring Boot提供的spring-jcl:

<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring-boot-starter-basic</artifactId>
    <version>6.0.0</version>
    <exclusions>
        <!-- 排除冲突的日志桥接依赖 -->
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>

可以执行mvn dependency:tree命令验证,确保项目中只有spring-jcl提供org.apache.commons.logging相关包。


2. 解决javax.el包冲突

这个冲突来自Activiti依赖的juel-api/juel-impl和Spring Boot Web starter依赖的tomcat.embed.el,两者都导出了javax.el包。由于Spring Boot已经提供了Tomcat的EL实现,完全可以替代JUEL,所以需要排除Activiti中的JUEL依赖:

在Activiti的依赖排除中添加以下内容:

<exclusion>
    <groupId>de.odysseus.juel</groupId>
    <artifactId>juel-api</artifactId>
</exclusion>
<exclusion>
    <groupId>de.odysseus.juel</groupId>
    <artifactId>juel-impl</artifactId>
</exclusion>

3. 优化module-info.java配置

你的模块声明可以更精准,同时避免不必要的依赖:

open module testmod {
    requires spring.boot;
    requires spring.boot.autoconfigure;
    requires spring.boot.starter.web; // 直接依赖Web Starter的自动模块
    requires java.sql;
    
    // 移除requires java.se; 因为Spring Boot的依赖已包含所需的基础模块
    exports com.test;
}

4. 确保Maven编译器插件支持Java 10

旧版本的Maven编译器插件对Java 9+的模块系统支持不佳,建议在pom.xml中添加指定版本的插件:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <release>10</release>
            </configuration>
        </plugin>
    </plugins>
</build>

完成以上修改后,重新执行构建应该就能解决所有拆分包相关的错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:04:39