JavaPoet开源项目的使用
JavaPoet开源项目的使用
- 准备工作
- 引入开源项目
- 实践
JavaPoet是出自JakeWharton一个可以生成.java源代码的开源项目,我们可以结合注解处理器在程序编译阶段动态生成我们想要的代码。下面我们来看看如何使用
JavaPoet项目地址
准备工作
在已有的Android项目中或新建项目中创建一个Module,如图1-1
然后,在弹出的窗口选择Java Library点击Next,起一个名字就叫lib-javapoet吧,点击Finish完成。如图1-2、图1-3
引入开源项目
打开刚创建的Java库找到build.gradle;
添加依赖:implementation’com.squareup:javapoet:1.11.1’
如图1-4、图1-5
好了下面来实践一下吧。
实践
我们尝试使用JavaPoet来动态生成一个HelloWorld类吧
package com.ethan.javapoet.lib_javapoet;import com.squareup.javapoet.JavaFile;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.TypeSpec;import java.io.IOException;import javax.lang.model.element.Modifier;public class MyClass {public static void main(String[] args){generateCode();}public static void generateCode(){//生成一个名为main的方法MethodSpec main = MethodSpec.methodBuilder("main")//方法的修饰符为public static.addModifiers(Modifier.PUBLIC, Modifier.STATIC)//方法返回值为void.returns(void.class)//方法的参数为String[] args.addParameter(String[].class, "args")//方法体为System.out.println("Hello, JavaPoet!");占位符$T代表导入class(添加类型),占位符$S代表Strings可以替换多个String.addCode("$T.out.println($S);", System.class, "Hello, JavaPoet!").build();//生成一个名为HelloWorld的类TypeSpec helloworld = TypeSpec.classBuilder("HelloWorld")//类的修饰符为public final.addModifiers(Modifier.PUBLIC, Modifier.FINAL)//将上面的main方法加入类中.addMethod(main).build();//生成包名为com.ethan.javapoet.lib_javapoet的HelloWorld类的Java源文件JavaFile javaFile = JavaFile.builder("com.ethan.javapoet.lib_javapoet", helloworld).build();try {//把生成的代码从控制台输出javaFile.writeTo(System.out);} catch (IOException e) {e.printStackTrace();}}
}
好啦,来运行一下上面的代码。
什么鬼???报错了。。。
Exception in thread "main" java.lang.NoClassDefFoundError: com/squareup/javapoet/MethodSpec
怎么会这样?找一下原因,在JavaPoet项目的Issues的Closed中找到有遇到同样错误的,来看看他们是怎么做的。
从上图sunshine763与yanzhenjie两位小伙伴的谈论中我们可以了解到在AndroidStudio中同时有Android Module和Java Module存在那么就会出现这个问题
JavaPoet开源项目的使用相关推荐
- JavaPoet 开源项目使用
JavaPoet开源项目使用 JavaPoet项目可以为我们动态的生成Java文件,这是一个很强大和很动态的方法.我们使用注解的时候假如需要生成新的Java文件就可以通过这个开源项目实现. 项目地址: ...
- GitHub上的“金矿”(236个Python开源项目,涵盖了15个领域)
人生苦短,越来越多的人,都开始用Python了. 但寻找好的项目资源,费时又费力,成了头号难题. 现在,好消息来了.最近,有人在GitHub上放了一座"金矿". 目前里面有236个 ...
- 【radar】毫米波雷达相关开源项目代码汇总(工具箱、仿真、2D毫米波检测、融合、4D毫米波检测、分割、SLAM、跟踪)(6)
[radar]毫米波雷达相关开源项目代码汇总(工具箱.仿真.2D毫米波检测.融合.4D毫米波检测.分割.SLAM.跟踪)(6) Toolbox pymmw https://github.com/m6c ...
- 使用git更新github上的开源项目
以前经常在github上下载一些开源项目,比如crtmpserver, nginx, apache traffic server, ffmpeg等, 一直不知道怎么同步更新到当前的最新源码. 我以前的 ...
- OpenDigg前端开源项目月报201704
由OpenDigg 出品的前端开源项目月报第一期来啦.我们的前端开源月报集合了OpenDigg一个月来新收录的优质前端开源项目,方便前端开发人员便捷的找到自己需要的项目工具. reactide Rea ...
- windows下nodejs express安装及入门网站,视频资料,开源项目介绍
windows下nodejs express安装及入门网站,视频资料,开源项目介绍,pm2,supervisor,npm,Pomelo,Grunt安装使用注意事项等总结 第一步:下载安装文件 下载地址 ...
- 人工智能和机器学习领域有哪些有趣的开源项目
人工智能和机器学习领域有哪些有趣的开源项目? 投递人 itwriter 发布于 2014-12-02 11:21 评论(0) 有20人阅读 原文链接 [收藏] « 本文简要介绍了 10 款 ...
- huggingface实操_盘点2018年度GtiHub开源项目TOP 25
本文作者 Pranav Dar 是 Analytics Vidhya 的编辑,对数据科学和机器学习有较深入的研究和简介,致力于为使用机器学习和人工智能推动人类进步找到新途径.2018 这一年中,作者在 ...
- python潜力开源项目_比较了1000多个Python开源项目,精选出这34个
传智播客博学谷 微信号:boxuegu- get最新最全的IT技能 免费领取各种视频资料 在过去的一年里,Mybridge比较了近1000个的Python开源库,并从中评选出34个最有用的工具来帮助你 ...
最新文章
- C语言之结构体以及结构体对齐访问
- 第一次作业词频分析之王熹篇
- es mysql延迟_ES 近实时搜索 更新延迟问题
- 【Python】青少年蓝桥杯_每日一题_9.11_买鸡
- SAP Hybris Commerce里类似ABAP里的透明表设计
- ImageIO 框架详细解析
- python 文本处理库_实用又好用,6 款 Python 特殊文本格式处理库推荐
- 拼多多回应驰伟插座起诉:积极应诉 希望其莫充当电商“二选一”插头
- 怎么改wps表格中折线图的横坐标?
- 休闲娱乐的计算机配置,入门APU主机配置 1199元双核APU家用娱乐电脑配置推荐
- fire.php,php代码调试利器firephp安装与使用方法分析
- luogu P1908 逆序对
- Linux下rpm、yum和源码三种安装方式详细介绍
- 非线性系统 知识梳理
- Remove annoying AD window when PopKart exits
- macOS + andriod studio + NDK
- Python动态图见得多了?Excel:亦可赛艇!我可是身经百战了
- Windows Phone 游戏 Roll In The Hole 去除 XBL 服务
- 作为一位软件测试工程师,应当需要哪些能力?
- 新星计划Day2【JavaSE】 枚举类与注解