*.java uses or overrides a deprecated API

本文深入解析Java中deprecated API的概念,详细解释为何某些方法被标记为过时,以及如何避免使用这些方法并过渡到更推荐的替代方案。通过实例演示,帮助开发者了解如何在代码中识别并替换deprecated API,确保代码的稳定性和安全性。

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

Note: MultiListener.java uses or overrides a deprecated API.
Note: Recompile with -deprecation for details.
--------------------------------------------

(1)不要紧,只是警告不是报错,告诉你用的方法过时了,有更好的方法可代替它,但不影响运行
你这个程序还是JDK1.0版本上的.在JAVA一代中都嫌老.

JDK1.1以前的都是JAVA1,而awt库JDK1.1对于JDK1.0来说已经是新库了,也就是JDK1.1刚出来的时候,已经把1.0中的AWT叫旧库了,何况现在已经是JAVA2了吗

(2)这些方法在JDK中已经是不提倡使用的了,继续使用这些方法在编译的时候只会提醒你而不会出错,你可以继续运行你的程序,但是有一定的风险,比如死锁等,SUN已经提供了取代这个不提倡使用方法的替代方法,你完全可以使用他的替代方法来实现你的程序。这里举一个例子:

在Date类中有很多这样的情况,你可以看看JDK我这里举一个方法:

intgetDate()Deprecated.AsofJDKversion1.1,replacedbyCalendar.get(Calendar.DAY_OF_MONTH).


(3)

编译的时候一个警告,java uses or overrides a deprecated API。求教!


问: Note: D:\java\work\c11_1.java uses or overrides a deprecated API. Recompile with "-deprecation" for details. 1 warning Process completed. 这个是什么错误啊?如果需要源代码,如下: package c11; import java.io.*; import java.util.*; public class c11_1 { public static void main(String [] args) throws IOException { if(args.length<=0) { System.out.print("Enter a file to show,please!"); return; } DataInputStream in= new DataInputStream( new BufferedInputStream( new FileInputStream(args[0]))); String s; Vector a=new Vector(); while((s=in.readLine())!=null) a.addElement(s); for(int i=a.size()-1;i>0;i--) System.out.println((String)a.elementAt(i)); } } ______________________________________________________________________________________________ 答1: 一个以后可能被抛弃的方法被使用了,你在编译参数里加上"-deprecation"就可以知道在哪里了。编译本身是通过的。 ______________________________________________________________________________________________ 答2: yes ______________________________________________________________________________________________ 答3: 对 ______________________________________________________________________________________________ 答4: 我用那个deprecation以后发现s=in.readLine()错误,何解? 请问,什么叫被抛弃的方法? ______________________________________________________________________________________________ 答5: To: xjffj(小刀) deprecation这个东西怎么用的呢? ,有什么作用呢!谢谢! ______________________________________________________________________________________________ 答6: 我也不知道deprecation这个东西怎么用的,xjffj(小刀)能解释一下吗? ______________________________________________________________________________________________ 答7: 顶一下~~~~~~谁能多解释一下啊~~~~什么叫被抛弃的方法? ______________________________________________________________________________________________ 答8: 就是以后的版本中可能不再支持该方法了 ______________________________________________________________________________________________ 答9: sun不推荐使用用的方法,可能在以后的版本中会被舍弃 请尽量不要使用那些方法,因为一定有别的好的可替代方法。 ______________________________________________________________________________________________ 答10: 从键盘上获取字符的时候可能产生的缓冲溢出等问题引起的错误会被抛出,这个叫做异常 exception. 我用那个deprecation以后发现s=in.readLine()错误,何解? 请问,什么叫被抛弃的方法? 这里所说的应该是这样子的 ______________________________________________________________________________________________ 答11: kypfos(夜色太漫长) 说的对 你可以带着.readLine()去帮助文件里(例如:JBuilder的帮助文件)查一下,它会告诉你该方法将会被抛弃,并会给出当前版本中能够替代该方法的新方法 ______________________________________________________________________________________________ 答12: 1、被抛弃的方法:严格不是这样叫法,是对deprecated翻译,这里还是叫deprecated。 在java的老版本(如java1.1版本)中实现的,但在发布后,发现存在问题或不够完善(当然使用时不一定就会有问题),在以后的版本(如java1.2)中虽然还保留下来,也可以继续使用,但提供了另外更好的方法来代替它。当你程序用到此方法时,会出现你遇到的提示。 2、s=in.readLine()这句中调用的实际是DataInputStream的readLine,对于这个流它的长处在于处理数据,就象是整型类别的,而不是字符串(readline是读字符串),因此建议使用BufferedReader来代替DataInputStream处理字符串,因此提示deprecated。 3、虽然是deprecated,但这只是提示,程序仍然可以运行的,只是不推荐使用,一般情况下也不一定会出问题。 4、这和异常exception没有关系。 ______________________________________________________________________________________________ 答13: deprecated方法就是Sun不保证在将来的jdk中会被提供的方法,也就是属于会逐渐被淘汰的方法。但基本上这些deprecated方法可以支持至少2个大版本的jdk,在jdk中每个方法都有注明是那个版本开始使用的。很多1.1时代的方法现在都还在支持呢(比如事件模型),所以放心使用就是了。不过最好还是注意一下,实在太早的方法就不要用了。 ______________________________________________________________________________________________ 答14: 哦!~~谢谢大家啦!~~

<style> <!-- img {border:none} .moreArticles {margin-top:50px; font-size:14px} .moreArticles ul {list-style:disc} .moreArticles ul li {height:23px; line-height:23px; font-size:14px} .moreArticles h2 {margin:0px; padding:0px; font-size:14px; font-weight:normal; height:30px} .moreArticles h2 a {text-decoration:underline} .conBg_oth {position:absolute; left:505px; top:505px; width:644px; height:390px; border:1px solid #6d6b6a; z-index:900; background:#fff} .editMya {width:642px; height:390px; border:1px solid #a8bac1; font-size:12px} .editTop {height:22px; padding-top:3px; padding-left:12px; font-size:14px; font-weight:normal; color:#4e7786} .editTop span {float:right; padding-right:6px; padding-top:2px} .editLeft {width:396px; float:left; padding-left:12px; padding-top:12px; font-size:12px} .f000 {color:#000} .selectAticle {height:25px} .selectAticle .fright {float:right} --> </style>
[root@node ~]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.42 MySQL Community Server - GPL Copyright (c) 2000, 2025, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> CREATE DATABASE weblog_db; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE DATABASE weblog_db' at line 1 mysql> CREATE DATABASE weblog_db; ERROR 1007 (HY000): Can't create database 'weblog_db'; database exists mysql> USE weblog_db; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> DROP DATABASE IF EXISTS weblog_db; Query OK, 2 rows affected (0.02 sec) mysql> CREATE DATABASE weblog_db; Query OK, 1 row affected (0.01 sec) mysql> USE weblog_db; Database changed mysql> CREATE TABLE page_visits ( -> page VARCHAR(255) , -> visits BIGINT -> ); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TABLE page_visits ( page VARCHAR(255) , visits BIGINT )' at line 1 mysql> CREATE TABLE page_visits ( -> page VARCHAR(255), -> visits BIGINT -> ); Query OK, 0 rows affected (0.02 sec) mysql> SHOW TABLES; +---------------------+ | Tables_in_weblog_db | +---------------------+ | page_visits | +---------------------+ 1 row in set (0.00 sec) mysql> ^C mysql> q -> quit -> exit -> ^C mysql> ^C mysql> ^C mysql> ^DBye [root@node ~]# hive SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. Hive Session ID = 7bb79582-cc2b-49b6-abc7-020dcdc46542 Logging initialized using configuration in jar:file:/home/hive-3.1.3/lib/hive-common-3.1.3.jar!/hive-log4j2.properties Async: true Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases. Hive Session ID = 15d9da52-e18e-40b2-a80f-e76eda81df4c hive> DESCRIBE FORMATTED page_visits; OK # col_name data_type comment page string visits bigint # Detailed Table Information Database: default OwnerType: USER Owner: root CreateTime: Tue Jul 08 01:43:42 CST 2025 LastAccessTime: UNKNOWN Retention: 0 Location: hdfs://node:9000/hive/warehouse/page_visits Table Type: MANAGED_TABLE Table Parameters: COLUMN_STATS_ACCURATE {\"BASIC_STATS\":\"true\"} bucketing_version 2 numFiles 1 numRows 4 rawDataSize 56 totalSize 60 transient_lastDdlTime 1751910222 # Storage Information SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe InputFormat: org.apache.hadoop.mapred.TextInputFormat OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Compressed: No Num Buckets: -1 Bucket Columns: [] Sort Columns: [] Storage Desc Params: serialization.format 1 Time taken: 0.785 seconds, Fetched: 32 row(s) hive> [root@node ~]# [root@node ~]# sqoop export \ > --connect jdbc:mysql://localhost/weblog_db \ > --username root \ > --password Aa@123456 \ > --table page_visits \ > --export-dir hdfs://node:9000/hive/warehouse/page_visits \ > --input-fields-terminated-by '\001' \ > --num-mappers 1 Warning: /home/sqoop-1.4.7/../hcatalog does not exist! HCatalog jobs will fail. Please set $HCAT_HOME to the root of your HCatalog installation. Warning: /home/sqoop-1.4.7/../accumulo does not exist! Accumulo imports will fail. Please set $ACCUMULO_HOME to the root of your Accumulo installation. 2025-07-08 15:28:12,550 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7 2025-07-08 15:28:12,587 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead. 2025-07-08 15:28:12,704 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset. 2025-07-08 15:28:12,708 INFO tool.CodeGenTool: Beginning code generation Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary. 2025-07-08 15:28:13,225 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `page_visits` AS t LIMIT 1 2025-07-08 15:28:13,266 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `page_visits` AS t LIMIT 1 2025-07-08 15:28:13,280 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /home/hadoop/hadoop3.3 Note: /tmp/sqoop-root/compile/363869e21c2078b9742685122c43a3cc/page_visits.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. 2025-07-08 15:28:16,377 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-root/compile/363869e21c2078b9742685122c43a3cc/page_visits.jar 2025-07-08 15:28:16,391 INFO mapreduce.ExportJobBase: Beginning export of page_visits 2025-07-08 15:28:16,391 INFO Configuration.deprecation: mapred.job.tracker is deprecated. Instead, use mapreduce.jobtracker.address 2025-07-08 15:28:16,484 INFO Configuration.deprecation: mapred.jar is deprecated. Instead, use mapreduce.job.jar 2025-07-08 15:28:17,339 INFO Configuration.deprecation: mapred.reduce.tasks.speculative.execution is deprecated. Instead, use mapreduce.reduce.speculative 2025-07-08 15:28:17,342 INFO Configuration.deprecation: mapred.map.tasks.speculative.execution is deprecated. Instead, use mapreduce.map.speculative 2025-07-08 15:28:17,343 INFO Configuration.deprecation: mapred.map.tasks is deprecated. Instead, use mapreduce.job.maps 2025-07-08 15:28:17,555 INFO client.DefaultNoHARMFailoverProxyProvider: Connecting to ResourceManager at node/192.168.196.122:8032 2025-07-08 15:28:17,782 INFO mapreduce.JobResourceUploader: Disabling Erasure Coding for path: /tmp/hadoop-yarn/staging/root/.staging/job_1751959003014_0001 2025-07-08 15:28:26,026 INFO input.FileInputFormat: Total input files to process : 1 2025-07-08 15:28:26,029 INFO input.FileInputFormat: Total input files to process : 1 2025-07-08 15:28:26,495 INFO mapreduce.JobSubmitter: number of splits:1 2025-07-08 15:28:26,528 INFO Configuration.deprecation: mapred.map.tasks.speculative.execution is deprecated. Instead, use mapreduce.map.speculative 2025-07-08 15:28:26,619 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1751959003014_0001 2025-07-08 15:28:26,620 INFO mapreduce.JobSubmitter: Executing with tokens: [] 2025-07-08 15:28:26,805 INFO conf.Configuration: resource-types.xml not found 2025-07-08 15:28:26,805 INFO resource.ResourceUtils: Unable to find 'resource-types.xml'. 2025-07-08 15:28:27,226 INFO impl.YarnClientImpl: Submitted application application_1751959003014_0001 2025-07-08 15:28:27,264 INFO mapreduce.Job: The url to track the job: http://node:8088/proxy/application_1751959003014_0001/ 2025-07-08 15:28:27,264 INFO mapreduce.Job: Running job: job_1751959003014_0001 2025-07-08 15:28:34,334 INFO mapreduce.Job: Job job_1751959003014_0001 running in uber mode : false 2025-07-08 15:28:34,335 INFO mapreduce.Job: map 0% reduce 0% 2025-07-08 15:28:38,374 INFO mapreduce.Job: map 100% reduce 0% 2025-07-08 15:28:38,381 INFO mapreduce.Job: Job job_1751959003014_0001 failed with state FAILED due to: Task failed task_1751959003014_0001_m_000000 Job failed as tasks failed. failedMaps:1 failedReduces:0 killedMaps:0 killedReduces: 0 2025-07-08 15:28:38,448 INFO mapreduce.Job: Counters: 8 Job Counters Failed map tasks=1 Launched map tasks=1 Data-local map tasks=1 Total time spent by all maps in occupied slots (ms)=2061 Total time spent by all reduces in occupied slots (ms)=0 Total time spent by all map tasks (ms)=2061 Total vcore-milliseconds taken by all map tasks=2061 Total megabyte-milliseconds taken by all map tasks=2110464 2025-07-08 15:28:38,456 WARN mapreduce.Counters: Group FileSystemCounters is deprecated. Use org.apache.hadoop.mapreduce.FileSystemCounter instead 2025-07-08 15:28:38,457 INFO mapreduce.ExportJobBase: Transferred 0 bytes in 21.1033 seconds (0 bytes/sec) 2025-07-08 15:28:38,462 WARN mapreduce.Counters: Group org.apache.hadoop.mapred.Task$Counter is deprecated. Use org.apache.hadoop.mapreduce.TaskCounter instead 2025-07-08 15:28:38,462 INFO mapreduce.ExportJobBase: Exported 0 records. 2025-07-08 15:28:38,462 ERROR mapreduce.ExportJobBase: Export job failed! 2025-07-08 15:28:38,463 ERROR tool.ExportTool: Error during export: Export job failed! at org.apache.sqoop.mapreduce.ExportJobBase.runExport(ExportJobBase.java:445) at org.apache.sqoop.manager.SqlManager.exportTable(SqlManager.java:931) at org.apache.sqoop.tool.ExportTool.exportTable(ExportTool.java:80) at org.apache.sqoop.tool.ExportTool.run(ExportTool.java:99) at org.apache.sqoop.Sqoop.run(Sqoop.java:147) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:81) at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183) at org.apache.sqoop.Sqoop.runTool(Sqoop.java:234) at org.apache.sqoop.Sqoop.runTool(Sqoop.java:243) at org.apache.sqoop.Sqoop.main(Sqoop.java:252) [root@node ~]# sqoop export \ > --connect jdbc:mysql://localhost/weblog_db \ > --username root \ > --password Aa@123456 \ > --table page_visits \ > --export-dir hdfs://node:9000/hive/warehouse/page_visits \ > --input-fields-terminated-by ',' \ > --num-mappers 1 Warning: /home/sqoop-1.4.7/../hcatalog does not exist! HCatalog jobs will fail. Please set $HCAT_HOME to the root of your HCatalog installation. Warning: /home/sqoop-1.4.7/../accumulo does not exist! Accumulo imports will fail. Please set $ACCUMULO_HOME to the root of your Accumulo installation. 2025-07-08 15:30:31,174 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7 2025-07-08 15:30:31,218 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead. 2025-07-08 15:30:31,333 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset. 2025-07-08 15:30:31,336 INFO tool.CodeGenTool: Beginning code generation Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary. 2025-07-08 15:30:31,771 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `page_visits` AS t LIMIT 1 2025-07-08 15:30:31,814 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `page_visits` AS t LIMIT 1 2025-07-08 15:30:31,821 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /home/hadoop/hadoop3.3 Note: /tmp/sqoop-root/compile/ab00e36d1f5084a0f7d522b4e9a975e5/page_visits.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. 2025-07-08 15:30:33,116 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-root/compile/ab00e36d1f5084a0f7d522b4e9a975e5/page_visits.jar 2025-07-08 15:30:33,129 INFO mapreduce.ExportJobBase: Beginning export of page_visits 2025-07-08 15:30:33,129 INFO Configuration.deprecation: mapred.job.tracker is deprecated. Instead, use mapreduce.jobtracker.address 2025-07-08 15:30:33,212 INFO Configuration.deprecation: mapred.jar is deprecated. Instead, use mapreduce.job.jar 2025-07-08 15:30:33,877 INFO Configuration.deprecation: mapred.reduce.tasks.speculative.execution is deprecated. Instead, use mapreduce.reduce.speculative 2025-07-08 15:30:33,880 INFO Configuration.deprecation: mapred.map.tasks.speculative.execution is deprecated. Instead, use mapreduce.map.speculative 2025-07-08 15:30:33,880 INFO Configuration.deprecation: mapred.map.tasks is deprecated. Instead, use mapreduce.job.maps 2025-07-08 15:30:34,097 INFO client.DefaultNoHARMFailoverProxyProvider: Connecting to ResourceManager at node/192.168.196.122:8032 2025-07-08 15:30:34,310 INFO mapreduce.JobResourceUploader: Disabling Erasure Coding for path: /tmp/hadoop-yarn/staging/root/.staging/job_1751959003014_0002 2025-07-08 15:30:39,127 INFO input.FileInputFormat: Total input files to process : 1 2025-07-08 15:30:39,131 INFO input.FileInputFormat: Total input files to process : 1 2025-07-08 15:30:39,995 INFO mapreduce.JobSubmitter: number of splits:1 2025-07-08 15:30:40,022 INFO Configuration.deprecation: mapred.map.tasks.speculative.execution is deprecated. Instead, use mapreduce.map.speculative 2025-07-08 15:30:40,532 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1751959003014_0002 2025-07-08 15:30:40,532 INFO mapreduce.JobSubmitter: Executing with tokens: [] 2025-07-08 15:30:40,689 INFO conf.Configuration: resource-types.xml not found 2025-07-08 15:30:40,689 INFO resource.ResourceUtils: Unable to find 'resource-types.xml'. 2025-07-08 15:30:40,746 INFO impl.YarnClientImpl: Submitted application application_1751959003014_0002 2025-07-08 15:30:40,783 INFO mapreduce.Job: The url to track the job: http://node:8088/proxy/application_1751959003014_0002/ 2025-07-08 15:30:40,784 INFO mapreduce.Job: Running job: job_1751959003014_0002 2025-07-08 15:30:46,847 INFO mapreduce.Job: Job job_1751959003014_0002 running in uber mode : false 2025-07-08 15:30:46,848 INFO mapreduce.Job: map 0% reduce 0% 2025-07-08 15:30:50,893 INFO mapreduce.Job: map 100% reduce 0% 2025-07-08 15:30:51,905 INFO mapreduce.Job: Job job_1751959003014_0002 failed with state FAILED due to: Task failed task_1751959003014_0002_m_000000 Job failed as tasks failed. failedMaps:1 failedReduces:0 killedMaps:0 killedReduces: 0 2025-07-08 15:30:51,973 INFO mapreduce.Job: Counters: 8 Job Counters Failed map tasks=1 Launched map tasks=1 Data-local map tasks=1 Total time spent by all maps in occupied slots (ms)=2058 Total time spent by all reduces in occupied slots (ms)=0 Total time spent by all map tasks (ms)=2058 Total vcore-milliseconds taken by all map tasks=2058 Total megabyte-milliseconds taken by all map tasks=2107392 2025-07-08 15:30:51,979 WARN mapreduce.Counters: Group FileSystemCounters is deprecated. Use org.apache.hadoop.mapreduce.FileSystemCounter instead 2025-07-08 15:30:51,980 INFO mapreduce.ExportJobBase: Transferred 0 bytes in 18.0828 seconds (0 bytes/sec) 2025-07-08 15:30:51,983 WARN mapreduce.Counters: Group org.apache.hadoop.mapred.Task$Counter is deprecated. Use org.apache.hadoop.mapreduce.TaskCounter instead 2025-07-08 15:30:51,983 INFO mapreduce.ExportJobBase: Exported 0 records. 2025-07-08 15:30:51,983 ERROR mapreduce.ExportJobBase: Export job failed! 2025-07-08 15:30:51,984 ERROR tool.ExportTool: Error during export: Export job failed! at org.apache.sqoop.mapreduce.ExportJobBase.runExport(ExportJobBase.java:445) at org.apache.sqoop.manager.SqlManager.exportTable(SqlManager.java:931) at org.apache.sqoop.tool.ExportTool.exportTable(ExportTool.java:80) at org.apache.sqoop.tool.ExportTool.run(ExportTool.java:99) at org.apache.sqoop.Sqoop.run(Sqoop.java:147) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:81) at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183) at org.apache.sqoop.Sqoop.runTool(Sqoop.java:234) at org.apache.sqoop.Sqoop.runTool(Sqoop.java:243) at org.apache.sqoop.Sqoop.main(Sqoop.java:252) [root@node ~]# 6.2 Sqoop导出数据 6.2.1从Hive将数据导出到MySQL 6.2.2sqoop导出格式 6.2.3导出page_visits表 6.2.4导出到ip_visits表 6.3验证导出数据 6.3.1登录MySQL 6.3.2执行查询
07-09
翻译: Of course. After reviewing your Gradle files, it's clear the main problem is not a single error but a mix of structural issues, outdated practices, and critical typos. Your build script merges settings that should be in separate files and uses fragile methods that will cause constant problems. Here is a breakdown of the issues and a step-by-step guide to fix them. ----- ### \#\# 1. Critical Errors That Will Break the Build These issues need to be fixed first, as they will prevent Gradle from running correctly. #### **A. Typo in `targetSdk`** In your module's `build.gradle`, you have a typo. * **Problem:** `targetsdk 34` * **Fix:** It should be `targetSdk` (with a capital 'S'). <!-- end list --> ```groovy // In your module's build.gradle defaultConfig { minSdk 29 targetSdk 34 // FIX: Was 'targetsdk' } ``` #### **B. Typo in JaCoCo Configuration** In your `createOfflineTestCoverageReport` task, you have a typo in the word "configurations". * **Problem:** `classpath: configur3+ations.jacocoAnt.asPath` * **Fix:** It should be `configurations.jacocoAnt.asPath`. <!-- end list --> ```groovy // In your JaCoCo task ant.taskdef(name: 'report', classname: 'org.jacoco.ant.ReportTask', classpath: configurations.jacocoAnt.asPath) // FIX: Was 'configur3+ations' ``` ----- ### \#\# 2. Major Structural Problems Your project's build logic is incorrectly structured. You've mixed settings for the root project and the `model_base` module into one file. #### **A. Root Project and Module Logic are Mixed** You should have at least two `build.gradle` files: one in the project's root directory and one inside your `model_base` module. * **Project Root `build.gradle` or `build.gradle.kts`:** Should contain `buildscript` settings (like the Android Gradle Plugin version) and `allprojects` repository settings. It should **not** contain `apply plugin: 'com.android.library'` or Android-specific settings like `compileSdk`. * **Module `app/build.gradle` or `library/build.gradle.kts`:** Should contain `plugins { id 'com.android.library' }`, the `android { ... }` block, and the `dependencies { ... }` for that specific module. #### **B. Action Plan: Restructure Your Files** **Step 1: Create a `settings.gradle` file in your project root** (if you don't have one). It tells Gradle which modules are part of your project. ```groovy // settings.gradle include ':model_base' // include ':app' // if you have an app module ``` **Step 2: Clean up your Root `build.gradle` file.** It should only contain build-wide information. ```groovy // Project Root: build.gradle // The buildscript block is an older pattern, but if you keep it: buildscript { repositories { google() mavenCentral() } dependencies { // Use a consistent version for AGP classpath 'com.android.tools.build:gradle:8.1.0' // You don't need JaCoCo here; the plugin handles it. } } allprojects { repositories { google() mavenCentral() maven { url "https://jitpack.io" } } } ``` **Step 3: Create/Fix your Module `model_base/build.gradle` file.** This is where most of your current code should go. ```groovy // Module: model_base/build.gradle // Use the plugins block at the top plugins { id 'com.android.library' id 'jacoco' // Apply jacoco plugin here } android { namespace 'com.st.model_base' compileSdk 34 defaultConfig { minSdk 29 targetSdk 34 // Corrected typo } // ... your other android settings } dependencies { // ... your dependencies implementation 'androidx.appcompat:appcompat:1.6.1' // Updated version } // ... your JaCoCo tasks and configuration ``` ----- ### \#\# 3. Bad Practices and Recommendations These are issues that make your build slow, fragile, and hard to maintain. #### **A. Manual `bootstrapClasspath` Manipulation is Very Bad** Your use of `options.compilerArgs << '-Xbootclasspath/p:...'` and manually rebuilding the `bootstrapClasspath` to include `framework.jar` is an extremely fragile and outdated practice. * **Why it's bad:** It overrides the standard Android compile environment. It can break with any update to AGP, Gradle, or Java. It makes your build completely dependent on a local JAR file. * **Recommendation:** **Remove all three `gradle.projectsEvaluated` blocks.** Rely on the `compileSdk 34` to provide the Android APIs. If you absolutely need APIs not available in the public SDK, this approach is still not recommended and indicates a potential design flaw. #### **B. `dependsOn(clean)` is an Anti-Pattern** Your line `createOfflineTestCoverageReport.dependsOn(clean)` is very inefficient. * **Why it's bad:** It forces a complete project clean and recompile **every time** you want to generate a report. This will make your build process incredibly slow. * **Recommendation:** **Delete this line.** Gradle's tasks are designed to be incremental. #### **C. Redundant Configurations** You have multiple `tasks.withType(Test)` and `gradle.projectsEvaluated` blocks. This makes the script confusing. * **Recommendation:** Combine them into single blocks to avoid conflicts and make the logic clear. #### **D. Outdated Dependencies and Repositories** * **JCenter is Deprecated:** Remove `jcenter()` from your repositories. It was shut down years ago and can slow down your build as Gradle tries to connect to it. `mavenCentral()` has replaced it. * **Old AppCompat Library:** `androidx.appcompat:appcompat:1.4.1` is old for `compileSdk 34`. Update it to a more recent version like `1.6.1` to avoid potential incompatibilities.
最新发布
07-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值