system-api.txt:27075: error 13 has added 'final' qualifier

本文介绍了解决Android源码编译中API不一致导致的错误的方法。通过确保prebuilts/sdk/system-api/25.txt与frameworks/base/api/system-current.txt等文件中的API声明一致,可以避免编译失败。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

修改android N源码过程中如果修改了原始的api导致编译出现如下错误,解决方法是让prebuilts/sdk/system-api/25.txt中的声明和frameworks/base/api/system-current.txt或者current.txt保持一致

错误log如下:

FAILED: /bin/bash -c "(( out/host/linux-x86/bin/apicheck -JXmx1024m -J\"classpath /usr/lib/jvm/java-8-openjdk-amd64/bin/../lib/tools.jar:out/host/linux-x86/framework/doclava.jar:out/host/linux-x86/framework/jsilver.jar\"  -hide 2 -hide 3 -hide 4 -hide 5 -hide 6 -hide 24 -hide 25 -hide 26 -hide 27 -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 -error 16 -error 17 -error 18   prebuilts/sdk/system-api/25.txt  out/target/common/obj/PACKAGING/system-api.txt  frameworks/base/api/system-removed.txt  out/target/common/obj/PACKAGING/system-removed.txt || (  cat build/core/apicheck_msg_last.txt ; exit 38 ) ) ) && (mkdir -p out/target/common/obj/PACKAGING/ ) && (touch out/target/common/obj/PACKAGING/checksystemapi-last-timestamp )"
out/target/common/obj/PACKAGING/system-api.txt:27074: warning 23: Class android.net.wifi.WifiManager.WpsCallback changed class/interface declaration
out/target/common/obj/PACKAGING/system-api.txt:27075: error 13: Method android.net.wifi.WifiManager.WpsCallback.onFailed(int) has added 'final' qualifier
out/target/common/obj/PACKAGING/system-api.txt:27076: error 13: Method android.net.wifi.WifiManager.WpsCallback.onStarted(String) has added 'final' qualifier
out/target/common/obj/PACKAGING/system-api.txt:27077: error 13: Method android.net.wifi.WifiManager.WpsCallback.onSucceeded() has added 'final' qualifier
out/target/common/obj/PACKAGING/system-api.txt:47567: error 17: Field 
prebuilts/sdk/system-api/25.txt:27030: error 9: Removed public constructor android.net.wifi.WifiManager.WpsCallback.WifiManager.WpsCallback()

api的源,或者说是正确的api在如下两个路径
prebuilds/sdk/system-api/XX.txt
prebuilds/sdk/api/XX.txt
XX指api level
上面的错误api level就是25

make update-api生成
system-api.txt和current.txt

make的时候会用生成的这两个txt与api的源进行比较,如果不一致就会编译失败产生类似的错误

修正方式就是让源和编译生成的api一致

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysUserServiceImpl' defined in file [D:\workspace\dochub\target\classes\com\sat\dochub\service\impl\SysUserServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'sysUserMapper' defined in file [D:\workspace\dochub\target\classes\com\sat\dochub\mapper\SysUserMapper.class]: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:804) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:240) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1395) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1232) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:569) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:373) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.DefaultListableBeanFactory.instantiateSingleton(DefaultListableBeanFactory.java:1222) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingleton(DefaultListableBeanFactory.java:1188) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:1123) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:987) ~[spring-context-6.2.8.jar:6.2.8] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:627) ~[spring-context-6.2.8.jar:6.2.8] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.5.3.jar:3.5.3] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752) ~[spring-boot-3.5.3.jar:3.5.3] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) ~[spring-boot-3.5.3.jar:3.5.3] at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) ~[spring-boot-3.5.3.jar:3.5.3] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1361) ~[spring-boot-3.5.3.jar:3.5.3] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1350) ~[spring-boot-3.5.3.jar:3.5.3] at com.sat.dochub.DochubApplication.main(DochubApplication.java:13) ~[classes/:na] Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysUserMapper' defined in file [D:\workspace\dochub\target\classes\com\sat\dochub\mapper\SysUserMapper.class]: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1826) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:607) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:373) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1745) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1628) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:913) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-6.2.8.jar:6.2.8] ... 21 common frames omitted Caused by: java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required at org.springframework.util.Assert.notNull(Assert.java:181) ~[spring-core-6.2.8.jar:6.2.8] at org.mybatis.spring.support.SqlSessionDaoSupport.checkDaoConfig(SqlSessionDaoSupport.java:125) ~[mybatis-spring-3.0.3.jar:3.0.3] at org.mybatis.spring.mapper.MapperFactoryBean.checkDaoConfig(MapperFactoryBean.java:73) ~[mybatis-spring-3.0.3.jar:3.0.3] at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:44) ~[spring-tx-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1873) ~[spring-beans-6.2.8.jar:6.2.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1822) ~[spring-beans-6.2.8.jar:6.2.8] ... 32 common frames omitted Disconnected from the target VM, address: '127.0.0.1:53607', transport: 'socket' Process finished with exit code 1
最新发布
07-05
<think>我们遇到了Spring Boot启动失败的问题,错误信息指出在配置SysUserMapper bean时缺少'sqlSessionFactory'或'sqlSessionTemplate'属性。这通常发生在MyBatis集成中,尤其是在多数据源配置或自定义MyBatis配置时。根据引用[3]的内容,多数据源配置可能导致bean冲突,需要明确指定主bean或使用限定符。 解决方案步骤: 1. **检查MyBatis依赖**:确保在pom.xml中正确引入了MyBatis Spring Boot Starter。 ```xml <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> ``` 2. **单数据源配置**:如果只有一个数据源,确保在application.yml中正确配置了数据源和MyBatis相关属性。 ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/test username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource # 如果使用Druid,需要指定type(引用[1]) mybatis: mapper-locations: classpath:mapper/*.xml # 指定Mapper XML文件位置 configuration: map-underscore-to-camel-case: true # 可选:开启驼峰命名 ``` 3. **多数据源配置**:如果配置了多个数据源,则需要为每个数据源单独配置SqlSessionFactory和SqlSessionTemplate(引用[3])。以下是一个多数据源配置示例: ```java @Configuration @MapperScan(basePackages = "com.example.mapper.db1", sqlSessionTemplateRef = "db1SqlSessionTemplate") public class Db1DataSourceConfig { @Bean @ConfigurationProperties(prefix = "spring.datasource.db1") public DataSource db1DataSource() { return DataSourceBuilder.create().build(); } @Bean public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/db1/*.xml")); return bean.getObject(); } @Bean public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); } } // 类似配置第二个数据源,注意使用不同的前缀和包路径 ``` 在启动类上移除`@MapperScan`注解,改为在每个数据源配置类上使用`@MapperScan`并指定对应的`sqlSessionTemplateRef`。 4. **检查Mapper接口和XML文件**: - 确保Mapper接口位于`@MapperScan`指定的包路径下。 - 确保XML映射文件在`mybatis.mapper-locations`指定的路径下,且文件名与接口名一致。 5. **使用@Primary注解**:如果存在多个同类型的Bean(如多个数据源),需要在主数据源上添加`@Primary`注解(引用[3])。 ```java @Bean @Primary public DataSource primaryDataSource() { // 配置主数据源 } ``` 6. **检查Druid配置**:如果使用Druid连接池,需要显式指定`type`属性(引用[1]): ```yaml spring: datasource: type: com.alibaba.druid.pool.DruidDataSource ``` 7. **清理和重启**:执行`mvn clean install`清理并重新构建项目,然后重启应用。 如果按照以上步骤操作,应该能够解决启动失败的问题。如果问题仍然存在,请检查日志中是否有更详细的错误信息。 --- ### §§相关问题§§ 1. 如何配置Spring Boot的多数据源? 2. MyBatis中Mapper接口和XML文件如何映射? 3. 如何在Spring Boot中使用Druid连接池?</think>### 解决 Spring Boot 启动错误:Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required 这个错误表明 MyBatis 无法正确初始化 Mapper 接口(如 `SysUserMapper`),通常由以下原因引起: #### 🔧 核心解决方案 1. **检查 MyBatis 依赖配置** ```xml <!-- pom.xml 必须包含 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> ``` 缺少此依赖会导致无法自动配置 `SqlSessionFactory`[^1]。 2. **配置数据源类型(使用 Druid 时)** ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/db_account username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource # 关键!显式指定连接池类型 ``` Druid 不是 Spring Boot 默认连接池,必须通过 `type` 参数显式指定[^1]。 3. **多数据源冲突处理** ```java @Configuration public class MyBatisConfig { @Bean @Primary // 标记主数据源 public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); return bean.getObject(); } } ``` 多数据源时需使用 `@Primary` 指定主数据源[^3]。 4. **验证 Mapper 扫描配置** ```java @SpringBootApplication @MapperScan("com.sat.dochub.mapper") // 确保包路径正确 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` #### 🛠️ 进阶排查步骤 1. **检查 MyBatis XML 配置** 确保 `application.yml` 包含: ```yaml mybatis: mapper-locations: classpath:mapper/*.xml # XML映射文件路径 configuration: map-underscore-to-camel-case: true # 开启驼峰转换 ``` 2. **验证依赖注入顺序** ```java @Service public class UserService { // 推荐使用构造器注入 private final SysUserMapper userMapper; public UserService(SysUserMapper userMapper) { this.userMapper = userMapper; } } ``` 3. **调试 Bean 加载过程** 启动时添加参数查看详细日志: ```bash java -jar your-app.jar --debug ``` 搜索日志中的 `Creating shared instance of singleton bean` 查看 Bean 初始化顺序。 #### 💡 典型错误场景分析 | 场景 | 解决方案 | 引用 | |------|----------|------| | 使用 Druid 未指定 type | 添加 `type: com.alibaba.druid.pool.DruidDataSource` | [^1] | | 多数据源冲突 | 使用 `@Primary` 标记主数据源 | [^3] | | MyBatis Starter 缺失 | 添加 `mybatis-spring-boot-starter` 依赖 | [^1] | | Mapper XML 路径错误 | 检查 `mybatis.mapper-locations` 配置 | - | > **关键点**:90% 的此类错误通过正确配置数据源类型(`type`)和添加 `@MapperScan` 解决[^1][^3]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值