1.idea Դ?源码??
2.兴致来了讲讲idea中的maven安装、配置、源码应用
3.教你如何用 IDEA 反编译 jar 源码解读
4.idea 中源码在却一直报程序包***不存在
5.idea怎么创建多个包
idea Դ?源码??
还在编写无聊枯燥又难以维护的POJO吗?洁癖者的春天在哪里?请看Lombok!在过往的源码Java项目中,充斥着太多不友好的源码代码:POJO的getter/setter/toString;异常处理;I/O流的关闭操作等等,这些样板代码既没有技术含量,源码市场情绪源码通达信又影响着代码的源码美观,Lombok应运而生。源码
首先说明一下:任何技术的源码出现都是为了解决某一类问题的,如果在此基础上再建立奇技*巧,源码不如回归Java本身。源码应该保持合理使用而不滥用。源码
Lombok的源码使用非常简单,下面我们一起来看下:
1)引入相应的源码maven包:
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1..</version><scope>provided</scope></dependency>Lombok的scope=provided,说明它只在编译阶段生效,源码不需要打入包中。事实正是如此,Lombok在编译期将带Lombok注解的Java文件正确编译为完整的Class文件。
2)添加IDE工具对Lombok的支持:
IDEA中引入Lombok支持如下:
点击File--Settings设置界面,安装Lombok插件:
点击File--Settings设置界面,枪械源码开启AnnocationProcessors:
开启该项是为了让Lombok注解在编译阶段起到作用。
Eclipse的Lombok插件安装可以自行百度,也比较简单,值得一提的是,由于Eclipse内置的编译器不是Oraclejavac,而是eclipse自己实现的EclipseCompilerforJava(ECJ).要让ECJ支持Lombok,需要在eclipse.ini配置文件中添加如下两项内容:
-Xbootclasspath/a:[lombok.jar所在路径]
-javaagent:[lombok.jar所在路径]
3)Lombok实现原理:
自从Java6起,javac就支持“JSRPluggableAnnotationProcessingAPI”规范,只要程序实现了该API,就能在javac运行的时候得到调用。
Lombok就是一个实现了"JSRAPI"的程序。在使用javac的过程中,它产生作用的具体流程如下:
javac对源代码进行分析,生成一棵抽象语法树(AST)
javac编译过程中调用实现了JSR的Lombok程序
此时Lombok就对第一步骤得到的AST进行处理,找到Lombok注解所在类对应的语法树(AST),然后修改该语法树(AST),增加Lombok注解定义的相应树节点
javac使用修改后的抽象语法树(AST)生成字节码文件
4)Lombok注解的使用:
POJO类常用注解:
@Getter/@Setter:作用类上,生成所有成员变量的getter/setter方法;作用于成员变量上,生成该成员变量的CypherRatc 源码getter/setter方法。可以设定访问权限及是否懒加载等。
packagecom.trace;importlombok.AccessLevel;importlombok.Getter;importlombok.Setter;/***CreatedbyTraceon/5/.<br/>*DESC:测试类*/@SuppressWarnings("unused")publicclassTestClass{ publicstaticvoidmain(String[]args){ }@Getter(value=AccessLevel.PUBLIC)@Setter(value=AccessLevel.PUBLIC)publicstaticclassPerson{ privateStringname;privateintage;privatebooleanfriendly;}publicstaticclassAnimal{ privateStringname;privateintage;@Getter@Setterprivatebooleanfunny;}}在Structure视图中,可以看到已经生成了getter/setter等方法:
编译后的代码如下:[这也是传统Java编程需要编写的样板代码]
////Sourcecoderecreatedfroma.classfilebyIntelliJIDEA//(poweredbyFernflowerdecompiler)//packagecom.trace;publicclassTestClass{ publicTestClass(){ }publicstaticvoidmain(String[]args){ }publicstaticclassAnimal{ privateStringname;privateintage;privatebooleanfunny;publicAnimal(){ }publicbooleanisFunny(){ returnthis.funny;}publicvoidsetFunny(booleanfunny){ this.funny=funny;}}publicstaticclassPerson{ privateStringname;privateintage;privatebooleanfriendly;publicPerson(){ }publicStringgetName(){ returnthis.name;}publicintgetAge(){ returnthis.age;}publicbooleanisFriendly(){ returnthis.friendly;}publicvoidsetName(Stringname){ this.name=name;}publicvoidsetAge(intage){ this.age=age;}publicvoidsetFriendly(booleanfriendly){ this.friendly=friendly;}}}@ToString:作用于类,覆盖默认的toString()方法,可以通过of属性限定显示某些字段,通过exclude属性排除某些字段。
@EqualsAndHashCode:作用于类,覆盖默认的equals和hashCode
@NonNull:主要作用于成员变量和参数中,标识不能为空,否则抛出空指针异常。
@NoArgsConstructor,@RequiredArgsConstructor,@AllArgsConstructor:作用于类上,用于生成构造函数。有staticName、access等属性。
staticName属性一旦设定,将采用静态方法的方式生成实例,access属性可以限定访问权限。
@NoArgsConstructor:生成无参构造器;
@RequiredArgsConstructor:生成包含final和@NonNull注解的成员变量的构造器;
@AllArgsConstructor:生成全参构造器。
编译后结果:
publicstaticclassPerson{ @NonNullprivateStringname;privateintage;privatebooleanfriendly;publicStringtoString(){ return"TestClass.Person(name="+this.getName()+",memcmp 源码age="+this.getAge()+")";}@NonNullpublicStringgetName(){ returnthis.name;}publicintgetAge(){ returnthis.age;}publicbooleanisFriendly(){ returnthis.friendly;}publicvoidsetName(@NonNullStringname){ if(name==null){ thrownewNullPointerException("name");}else{ this.name=name;}}publicvoidsetAge(intage){ this.age=age;}publicvoidsetFriendly(booleanfriendly){ this.friendly=friendly;}privatePerson(){ }privatestaticTestClass.Personof(){ returnnewTestClass.Person();}@ConstructorProperties({ "name"})Person(@NonNullStringname){ if(name==null){ thrownewNullPointerException("name");}else{ this.name=name;}}@ConstructorProperties({ "name","age","friendly"})publicPerson(@NonNullStringname,intage,booleanfriendly){ if(name==null){ thrownewNullPointerException("name");}else{ this.name=name;this.age=age;this.friendly=friendly;}}}@Data:作用于类上,是以下注解的集合:@ToString@EqualsAndHashCode@Getter@Setter@RequiredArgsConstructor
@Builder:作用于类上,将类转变为建造者模式
@Log:作用于类上,生成日志变量。针对不同的日志实现产品,有不同的注解:
其他重要注解:
@Cleanup:自动关闭资源,针对实现了java.io.Closeable接口的对象有效,如:典型的IO流对象
编译后结果如下:
是不是简洁了太多。
@SneakyThrows:可以对受检异常进行捕捉并抛出,可以改写上述的main方法如下:
@Synchronized:作用于方法级别,可以替换synchronize关键字或lock锁,用处不大。
作者:LiWenD正在掘金
兴致来了讲讲idea中的maven安装、配置、应用
标题:深入理解Maven:安装、配置与应用实战 Maven,作为Java开发者不可或缺的构建工具,其核心理念是"约定优于配置"。它最初是为了简化 Jakarta Turbine 项目的构建流程,通过标准方法和清晰的ccscrollview 源码项目结构,统一处理依赖管理和项目构建,让开发工作更为高效。 首先,访问官网是了解Maven的最佳途径:Maven官网,从官网下载地址开始,我们有三种选择:最新版的Maven安装器、二进制包或源代码包,根据需求选择下载。 Maven本质是一个基于项目对象模型(POM)的工具,其主要目标是通过POM文件,将项目结构、依赖关系和构建过程标准化,解决传统Java开发中的痛点,如手动导入jar包、依赖管理混乱、兼容性问题等。Maven通过一个pom.xml文件,将所有jar包和项目分离,实现依赖的自动管理和加载。 安装Maven时,首先下载合适的版本,解压后配置环境变量,确保bin目录在系统路径中。默认情况下,Maven会将setting.xml文件指向C盘,建议在解压目录下创建repository文件夹并调整setting.xml的配置,以便于多版本Maven共存和选择。 在IDEA等开发环境中,配置好Maven后,通过file > project菜单,集成Maven工具。创建新项目时,填写GroupId、ArtifactId和Version,这些标识用于构建和管理项目依赖。IDEA会自动检测pom.xml中的依赖,进行自动导入。 如果安装过程中遇到问题,不必紧张,可以尝试重新安装或寻求帮助。Maven的轻量级设计使得问题排查相对简单,特别是对于初次安装和使用的新手来说。教你如何用 IDEA 反编译 jar 源码解读
要快速查看并解读 jar 包中的 class 源码,使用 IntelliJ IDEA (简称 IDEA) 是一个高效便捷的选择。只需几步操作,就能轻松反编译并阅读类源码。以下步骤指导你如何操作。
首先,确保你的本地 Maven 仓库已包含 jar 包。这里以阿里巴巴的 fastjson 包为例,其版本号为 1.2.。你可以在本地 .m2 仓库中找到并选择任意一个 jar 包。
接着,使用 WinRAR 或其他解压工具,将选中的 jar 包解压至当前文件夹中。解压后,你将看到一个名为 fastjson 的文件夹。
在解压出的 fastjson 文件夹内,寻找 JSON.class 文件。找到文件后,直接将鼠标拖拽至 IDEA 编辑器中即可。至此,你已成功反编译并打开了 jar 包中的源码。
这个方法简便高效,适用于快速查看和理解 jar 包内类的实现细节。通过这种方式,你不仅能更直观地了解代码逻辑,还有助于解决实际开发中遇到的问题。
来源:toutiao.com/i...
idea 中源码在却一直报程序包***不存在
调试期间遇到了一个问题,即在使用新环境操作一个 spring cloud 开源项目时,尽管 mvn install 操作没有出现错误,但在运行程序时却会弹出找不到“程序包***”的错误提示。让我倍感困惑的是,这个报错信息能够直接链接到引起报错的源代码段落,这表明并非代码存在逻辑错误,而更像是配置存在问题。
我尝试了一系列常规解决方案,包括但不限于调整字符编码设置为 utf-8、清空 IntelliJ IDEA 的缓存目录、清除 pom.xml 文件中的依赖项后重新添加、甚至尝试重置整个 IDEA 的设置以消除可能的隐藏配置错误。然而,这些方法在解决本次问题上都未产生预期效果。
最后,通过调整 Maven 的版本,问题终于得到解决。这似乎暗示了,之前的环境或工具版本可能导致了这一配置问题的出现,需要通过更新或更改 Maven 的版本来解决。整个过程虽然曲折,但对于后续在配置相关问题时提供了宝贵经验。今后,在遇到类似问题时,应该首先检查和优化 Maven 环境配置,包括版本管理、缓存处理和依赖关系的设置,以避免此类问题的再次发生。
idea怎么创建多个包
以创建三个层级的包“com.demo.pojo”为例,在idea一次性创建多个包的方法如下:
1.打开idea,进入项目的编辑界面。
2.选中项目的“java”源码目录,鼠标右键,依次点击:New --> Package。
3.在出现的“New Package”框中输入需要创建的“com.demo.pojo”,注意以点号“.”分割,即可一次性创建三个层级的包,其他多层级的包创建类似。