首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么Gradle不使用MRJAR的module-info.class?

Gradle是一种流行的构建工具,用于自动化构建、测试和部署软件项目。它支持多种编程语言和平台,包括Java。而MRJAR(Modular Runtime JAR)是Java 9及以上版本引入的一种模块化打包机制。

然而,Gradle目前不使用MRJAR的module-info.class,原因有以下几点:

  1. 兼容性:Gradle需要兼容不同版本的Java,包括早期版本的Java 8及以下。而MRJAR是从Java 9开始引入的,因此使用MRJAR的module-info.class会导致不兼容早期版本的Java。为了保持Gradle的跨版本兼容性,它选择不使用MRJAR。
  2. 构建速度:使用MRJAR的module-info.class会增加构建过程的复杂性和耗时。由于MRJAR的module-info.class包含了模块化信息,构建工具需要解析和处理这些信息。相比之下,Gradle选择使用传统的JAR打包机制,以提高构建速度和简化构建过程。

虽然Gradle不使用MRJAR的module-info.class,但它仍然支持Java 9及以上版本的模块化开发。开发者可以使用Gradle的模块化插件,如Java Library Plugin,来定义和管理模块化的依赖关系。

总结起来,Gradle不使用MRJAR的module-info.class主要是为了保持兼容性和提高构建速度。开发者仍然可以使用Gradle进行模块化开发,并根据项目需求选择合适的插件来管理模块化的依赖关系。相关的腾讯云产品和产品介绍链接地址,可以参考腾讯云的Java开发者工具和服务,如云开发工具包(https://cloud.tencent.com/product/tcb)、云函数(https://cloud.tencent.com/product/scf)等。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么不推荐使用PHPicker

,0表示不设限制,默认为1 config.selectionLimit = 0 // 可选择的资源类型 // 只显示图片(注:images 包含 livePhotos) config.filter =...case savedPhotosAlbum = 2 }复制代码 另外 AssetsLibrary 早在几年前被废弃,如果还在使用 AssetsLibrary 请尽快使用新的 API。...PHPicker 的缺点 为什么不推荐使用 PHPicker,虽然说 PHPicker 有一些优点,但同时也有一些缺点: 加载 iCloud 资源时没有进度回调 不支持图片编辑(比如选择头像要将图片裁剪成正方形...总结 新出的 PHPicker 个人觉得一般,如果对 Picker 要求不多的朋友可以考虑使用。...如果没有自定义 Picker 的朋友可以考虑使用我们做的第三方图片选择框架 AnyImageKit。 以上就是 iOS 14 相册的改动以及 PHPicker 的全部内容,如有错误欢迎指出。

2.6K40

MySQL为什么不推荐使用in

当使用IN语句时,MySQL可能会遇到以下问题: 索引问题:MySQL使用索引来加速查询,但在使用IN语句时,MySQL可能无法有效地使用索引。...这是因为IN语句中的值列表可能是动态的,无法提前确定索引的使用情况。当MySQL无法使用索引时,它将执行全表扫描,逐行比较每个值,这会导致查询性能下降。...内存消耗:当使用IN语句时,MySQL需要将值列表中的所有值加载到内存中进行比较。如果值列表很大,可能会导致内存消耗过高,甚至引发内存溢出的问题。这对于内存有限的系统来说尤其重要。...通过使用子查询,我们可以将IN语句拆分为多个较小的查询,从而提高查询性能。 当然,每个具体的情况都是不同的,所以在选择查询操作符时,我们需要根据具体的需求和数据情况进行评估和测试。...在优化查询性能时,我们可以使用MySQL的查询分析工具来帮助我们理解查询的执行计划和性能瓶颈,从而做出更好的决策。

36730
  • 为什么 MySQL 不推荐使用 join?

    对于 mysql,不推荐使用子查询和 join 是因为本身 join 的效率就是硬伤,一旦数据量很大效率就很难保证,强烈推荐分别根据索引 单表取数据,然后在程序里面做 join,merge 数据。...查询 id 集的时候,使用 IN()代替关联查询,可以让 MySQL 按照 ID 顺序进行查询,这可能比随机的关联要更高效。   可以减少冗余记录的查询。...从这点看,这样的重构还可能会减少网络和内存的消艳。   更进一步,这样做相当于在应用中实现了哈希关联,而不是使用 MySQL 的嵌套循环关联。某些场景哈希关联的效率要高很多。...当应用能够方便地缓存单个查询的结果的时候 当可以将数据分布到不同的 MySQL 服务器上的时候 当能够使用 IN()的方式代替关联查询的时候 并发场景多,DB 查询频繁,需要分库分表 1.DB 承担的业务压力大...分布式的分库分表。这种时候是不建议跨库 join 的。目前 mysql 的分布式中间件,跨库 join 表现不良。 3.

    2.1K20

    为什么不建议使用多表join?

    为什么不建议使用多表join? 尽管多表join在某些情况下是必要的,但在很多场景下,它们可能会带来一系列性能和维护上的问题。...以下是不推荐频繁使用多表join的几个主要原因: 性能问题 查询复杂性增加:多表JOIN会增加查询的复杂性,导致性能下降,尤其是在数据量大时。...I/O和内存使用:数据库需要处理更多的行和列,可能导致更高的I/O操作和内存使用。 查询优化难度:复杂的JOIN查询使得数据库查询优化器难以找到最佳的执行计划。...哈希冲突 哈希冲突处理:在构建哈希表时可能会出现哈希冲突,即不同的键值有相同的哈希值。处理冲突的一种方法是使用链表,将具有相同哈希值的行存储在同一个链表中。...性能考量 内存使用:Hash Join需要足够的内存来存储哈希表,如果内存不足,可能需要使用磁盘空间,从而影响性能。

    8310

    为什么不推荐使用存储过程?

    最近项目中遇到的存储过程问题,让我想起了去年在武汉出差时一位同事的发问: 我觉得存储过程挺好用的,为什么你不建议用?...除开网络性能,从接口设计的角度讲,接口的传入和返回值,都应是你本身需要的数据,不应带有大量不需要或者需要caller去预处理的数据。从接口语义表达就可知调用的目的,这样代码可读性也会有大大提高。...,我需要获得该person的jobs的数量,即GetJobs返回结果集的count。...为了实现这一目的,首先想到的是使用临时表,将返回结果集存入临时表,再对其进行count(*)的计数操作: CREATE PROCEDURE [dbo]....但对于业务逻辑的通用方法,非常不推荐将其写在存储过程中,代码复用、扩展与客户端语言比,相差甚远。也许终究能实现,但代价与风险比客户端语言要高,得不偿失。

    2K30

    为什么不建议使用goto语句

    现在老师上课基本上不怎么讲goto语句,很多文章也提到不建议使用,那到底是为什么呢? 首先,可以证明,任何一个程序都可以使用三种基本的结构来构成,goto语句是多余的。...为什么三种基本的程序结构就够了? 另外,goto容易使程序结构混乱。按结构化程序设计方法设计出的程序优点是:结构良好、各模块间的关系清晰简单、每一模块内都由基本单元组成。...这样设计出的程序清晰易读,可理解性好,容易设计,容易验证其正确性,也容易维护。 那goto语句就没有一点好处吗?有,合理恰当使用goto可以优化程序设计,提高可读性。...任何一个结构化程序在编译以后都是需要用机器语言中的直接转移指令语句(同goto完全是一回事)来实现其结构的。在编译时,编译系统常常为了对程序进行优化而加入直接转移指令。...回答是肯定的。滥用goto是会破坏程序的可读性,但合理地使用goto语句,除了能提高程序的效率外,还是有可能增加程序的可读性的。 总的来说,对于初学者,还是应该尽量避免。

    2.3K10

    到底为什么不建议使用SELECT * ?

    “不要使用SELECT *”几乎已经成为了使用MySQL的一条金科玉律,就连《阿里Java开发手册》也明确表示不得使用*作为查询的字段列表,更是让这条规则拥有了权威的加持。...但是我们总得知道为什么不建议直接使用SELECT *,本文从4个方面给出理由。 1....那使用SELECT *会不会使MySQL占用更多的内存呢?...既然使用了索引,为了避免重蹈无法使用覆盖索引的覆辙,我们也应该尽量不要直接SELECT *,而是将真正用到的字段作为查询列,并为其建立适当的索引。...使用join buffer的过程如下图所示: join buffer示意图 我们看一下上面的连接查询的执行计划,发现确实使用到了hash join(前提是没有为t2表的连接查询字段创建索引,否则就会使用索引

    82420

    为什么不建议你使用SELECT *

    作者: 蝉沐风作者网站:www.chanmufeng.com“不要使用SELECT *”几乎已经成为了MySQL使用的一条金科玉律,就连《阿里Java开发手册》也明确表示不得使用*作为查询的字段列表,更是让这条规则拥有了权威的加持...但是我们总得知道为什么不建议直接使用SELECT *,本文从4个方面给出理由。1....那使用SELECT *会不会使MySQL占用更多的内存呢?...既然使用了索引,为了避免重蹈无法使用覆盖索引的覆辙,我们也应该尽量不要直接SELECT *,而是将真正用到的字段作为查询列,并为其建立适当的索引。...使用join buffer的过程如下图所示:图片我们看一下上面的连接查询的执行计划,发现确实使用到了hash join(前提是没有为t2表的连接查询字段创建索引,否则就会使用索引,不会使用join buffer

    2.6K164

    为什么不建议使用 Java 原生 IO?

    开发出高质量的 NIO 程序并不是一件简单的事情。...除去 NIO 固有的复杂性和 Bug 不谈,作为一个 NIO 服务端,需要能够处理网络的闪断、客户端的重复接入、客户端的安全认证、消息的编解码、半包读写等情况, 如果你没有足够的 NIO 编程经验积累,...一个 NIO 框架的稳定往往需要半年甚至更长的时间。...更为糟糕的是,一旦在生产环境中发生问题,往往会导致跨节点的服务调用中断,严重的可能会导致整个集群环境都不可用, 需要重启服务器,这种非正常停机会带来巨大的损失。...对于 Java 原生的 IO 我们之所以不选择使用是因为: NIO的类库和API繁杂使用麻烦,你需要熟练掌握Selectol,ServerSocketChannel, SocketChannel,ByteBuffer

    73260

    为什么不建议直接使用 Async 注解?

    只适用于不需要多线程的地方。 ConcurrentTaskExecutor:Executor的适配类,不推荐使用。如果ThreadPoolTaskExecutor不满足要求时,才用考虑使用这个类。...SimpleThreadPoolTaskExecutor:是Quartz的SimpleThreadPool的类。线程池同时被quartz和非quartz使用,才需要使用此类。...应用默认的线程池,指在@Async注解在使用时,不指定线程池的名称。...查看源码,@Async的默认线程池为SimpleAsyncTaskExecutor。 无返回值调用 基于@Async无返回值调用,直接在使用类,使用方法(建议在使用方法)上,加上注解。...它实现了Future和CompletionStage接口 图片 默认线程池的弊端 在线程池应用中,参考阿里巴巴java开发规范:线程池不允许使用Executors去创建,不允许使用系统默认的线程池,推荐通过

    1.2K20

    为什么IDEA不推荐你使用@Autowired ?

    但是当我们使用IDEA写代码的时候,经常会发现@Autowired注解下面是有小黄线的,我们把小鼠标悬停在上面,可以看到这个如下图所示的警告信息: 那为什么IDEA会给出Field injection...方法来注入想要使用的依赖对象。...三种依赖注入的对比 在知道了Spring提供的三种依赖注入方式之后,我们继续回到本文开头说到的问题:IDEA为什么不推荐使用Field Injection呢?...我们可以从多个开发测试的考察角度来对比一下它们之间的优劣: 可靠性 从对象构建过程和使用过程,看对象在各阶段的使用是否可靠来评判: Field Injection:不可靠 Constructor Injection...使用@Autowired注解的时候,要使用Setter Injection方式,这样代码更容易编写单元测试。 好了,今天的学习就到这里!如果您学习过程中如遇困难?

    71020

    我为什么不建议使用框架默认的 DefaultMeterObservationHandler

    我为什么不建议使用框架默认的 DefaultMeterObservationHandler 背景知识 最近,我们升级了 SpringBoot 3.x,并且,升级后,我们全面改造了原来的 Sleuth 以及...全面使用 Observation 遇到了内存溢出以及 CPU 飙高(非不断 GC 导致) 但是,我们在全面使用 Observation 的时候,发现了一个问题,就是内存溢出以及 CPU 飙高(非不断 GC...为何会出现内存溢出 我们通过增加如下启动参数启动并且在退出的时候 dump JFR: -XX:StartFlightRecording=disk=true,dumponexit=true 或者使用下面的参数在内存溢出的时候...我们将全局的 ObservationHandler 改为什么都不做的,对比下: package com.github.hashjang.wwsmbjysymrdo; import io.micrometer.common.KeyValue...解决方案 我们可以替换掉 DefaultMeterObservationHandler,自己实现一个 MeterObservationHandler,在 start 的时候,不创建 LongTaskTimer.Sample

    13500

    为什么IDEA不推荐你使用@Autowired?

    但是当我们使用IDEA写代码的时候,经常会发现@Autowired注解下面是有小黄线的,我们把小鼠标悬停在上面,可以看到这个如下图所示的警告信息: 那么为什么IDEA会给出Field injection...具体形式如下: 这种注入方式也很好理解,就是通过调用成员变量的set方法来注入想要使用的依赖对象。...三种依赖注入的对比 在知道了Spring提供的三种依赖注入方式之后,我们继续回到本文开头说到的问题:IDEA为什么不推荐使用Field Injection呢?...我们可以从多个开发测试的考察角度来对比一下它们之间的优劣: 可靠性 从对象构建过程和使用过程,看对象在各阶段的使用是否可靠来评判: Field Injection:不可靠 Constructor Injection...使用@Autowired注解的时候,要使用Setter Injection方式,这样代码更容易编写单元测试。

    59820

    为什么很多人不推荐使用

    JSON Web Token(JWT)是一种广泛使用的开放标准(RFC 7519),用于在网络应用环境中以一种简洁的方式安全地传输信息。...尽管JWT的设计初衷是提高效率并减少复杂性,但在实际使用中,它也暴露出了一些潜在的问题。因此,许多技术专家和开发人员建议在特定场景下考虑其他方案。...本文将探讨为什么许多人不推荐使用JWT,并详细分析这些问题。1. JWT的基础知识在深入探讨之前,了解JWT的基础是非常重要的。...如果密钥管理不当,JWT的安全性会受到威胁。例如,如果使用了不安全的签名算法(如HS256),攻击者可以利用弱密钥或猜测密钥来伪造有效的JWT。...社区和支持JWT的广泛使用导致了大量的社区支持和资源,但也意味着错误的使用方式和实现方式也在不断出现。

    2.3K10

    为什么不推荐使用汉字作为密码?

    目录 1、使用传统 2、汉字加密难度大 3、用户设置习惯 4、保护密码更安全 5、统一标准 ---- 日常生活中,密码的使用十分常见。基本上,登录APP、手机支付、开机解锁,都需要使用密码。...密码的形式也多种多样:数字密码,指纹密码,字母密码等,却唯独没有汉字,这是为什么呢?如何提高密码的安全性呢? 汉字不能当密码的原因主要包括以下五点。...1、使用传统 有关密码组成中没有汉字这一问题,首先要追溯到计算机的发明。...而且使用中文输入时,还要考虑到输入法的输入习惯记录功能(即词库),输入法能够识别我们的密码,可能带来不必要的麻烦。...5、统一标准 对于一些大型的(尤其是在全世界各地区提供服务的)网站和应用,使用统一的密码规范能够降低服务和维护成本。

    58920

    Gradle的使用教程

    一、相关介绍 Gradle是一个好用的构建工具 ,使用它的原因是: 配置相关依赖代码量少,不会像maven一样xml过多 打包编译测试发布都有,而且使用起来方便 利用自定义的任务可以完成自己想要的功能...下载后解压到你想要的目录即可,然后设置环境变量: 在cmd模式下查看,出现以下信息证明安装成功: 然后我们可以在在环境变量里配置gradle默认的仓库地址(和maven不太一样): 三、IED中的使用...1、IDEA 使用idea创建一个web的Gradle项目 然后对项目进行打包运行: 双击war 打包完成之后的war文件会在: 然后把war放入对应的tomcat目录即可...repositories是一个仓库gradle会根据从上到下的顺序依次去仓库中寻找jar 这里我们默认的是一个maven的中心仓库 ,从gradle源代码中我们看到地址是这样的 这里可以进行配置,...使用固定的地址,这里可以使用(maven {url ‘http://maven.aliyun.com/nexus/content/groups/public/’})的镜像下载速度会快一些,然后也可以使用公司内部的私服地址

    94930

    Gradle的使用——在windows上面安装gradle

    Gradle的使用——在windows上面安装gradle 简介 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。...Gradle 构建脚本使用的是 Groovy 或 Kotlin 的特定领域语言来编写的,而不是传统的XML。...简述 在开始使用gradle之前,我们需要进行安装,下面是我进行整理的安装方式,便于大家快速安装。...环境 windows系统 已安装openjdk11 gradle官方 正文 1、下载发行包 登录gradle官方进行下载最新版发行包 这里我们进行下载二进制包 2、解压到指定目录 将下载下来的安装包放到一个特定目录进行解压...3、配置环境变量 配置GRADLE_HOME变量,内容为上一步解压的目录 配置Path变量,后面追加%GRADLE_HOME%\bin 4、进行测试是否正常。

    1.1K10

    美团:为什么 MySQL 不推荐使用 join?

    1.对于mysql,不推荐使用子查询和join是因为本身join的效率就是硬伤,一旦数据量很大效率就很难保证,强烈推荐分别根据索引单表取数据,然后在程序里面做join,merge数据。...查询id集的时候,使用IN()代替关联查询,可以让MySQL按照ID顺序进行查询,这可能比随机的关联要更高效。 可以减少冗余记录的查询。...:https://github.com/YunaiV/yudao-cloud 视频教程:https://doc.iocoder.cn/video/ 三、不推荐使用join的原因 1.DB承担的业务压力大...当表处于百万级别后,join导致性能下降; 2.分布式的分库分表。这种时候是不建议跨库join的。目前mysql的分布式中间件,跨库join表现不良。...四、不使用join的解决方案 在业务层,单表查询出数据后,作为条件给下一个单表查询。也就是子查询。会担心子查询出来的结果集太多。

    48010

    为什么不建议使用 Java 自带的序列化?

    但是在提供很用户简单的调用的同时他也存在很多问题: 1、无法跨语言 当我们进行跨应用之间的服务调用的时候如果另外一个应用使用c语言来开发,这个时候我们发送过去的序列化对象,别人是无法进行反序列化的因为其内部实现对于别人来说完全就是黑盒...2、序列化之后的码流太大 这个我们可以做一个实验还是上一节中的Message类,我们分别用java的序列化和使用二进制编码来做一个对比,下面我写了一个测试类: @Test public void testSerializable...byte[] result = new byte[buffer.remaining()]; buffer.get(result); System.out.println("使用二进制序列化的长度...result = new byte[buffer.remaining()]; buffer.get(result); /*System.out.println("使用二进制序列化的长度...结合以上我们看到: 目前的序列化过程中使用 Java 本身的肯定是不行,使用二进制编码的话又的我们自己去手写,所以为了让我们少搬砖前辈们早已经写好了工具让我们调用,目前社区比较活跃的有 google 的

    65130
    领券