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中找到有遇到同样错误的,来看看他们是怎么做的。


从上图sunshine763yanzhenjie两位小伙伴的谈论中我们可以了解到在AndroidStudio中同时有Android Module和Java Module存在那么就会出现这个问题

JavaPoet开源项目的使用相关推荐

  1. JavaPoet 开源项目使用

    JavaPoet开源项目使用 JavaPoet项目可以为我们动态的生成Java文件,这是一个很强大和很动态的方法.我们使用注解的时候假如需要生成新的Java文件就可以通过这个开源项目实现. 项目地址: ...

  2. GitHub上的“金矿”(236个Python开源项目,涵盖了15个领域)

    人生苦短,越来越多的人,都开始用Python了. 但寻找好的项目资源,费时又费力,成了头号难题. 现在,好消息来了.最近,有人在GitHub上放了一座"金矿". 目前里面有236个 ...

  3. 【radar】毫米波雷达相关开源项目代码汇总(工具箱、仿真、2D毫米波检测、融合、4D毫米波检测、分割、SLAM、跟踪)(6)

    [radar]毫米波雷达相关开源项目代码汇总(工具箱.仿真.2D毫米波检测.融合.4D毫米波检测.分割.SLAM.跟踪)(6) Toolbox pymmw https://github.com/m6c ...

  4. 使用git更新github上的开源项目

    以前经常在github上下载一些开源项目,比如crtmpserver, nginx, apache traffic server, ffmpeg等, 一直不知道怎么同步更新到当前的最新源码. 我以前的 ...

  5. OpenDigg前端开源项目月报201704

    由OpenDigg 出品的前端开源项目月报第一期来啦.我们的前端开源月报集合了OpenDigg一个月来新收录的优质前端开源项目,方便前端开发人员便捷的找到自己需要的项目工具. reactide Rea ...

  6. windows下nodejs express安装及入门网站,视频资料,开源项目介绍

    windows下nodejs express安装及入门网站,视频资料,开源项目介绍,pm2,supervisor,npm,Pomelo,Grunt安装使用注意事项等总结 第一步:下载安装文件 下载地址 ...

  7. 人工智能和机器学习领域有哪些有趣的开源项目

    人工智能和机器学习领域有哪些有趣的开源项目? 投递人 itwriter 发布于 2014-12-02 11:21 评论(0) 有20人阅读  原文链接  [收藏]  « 本文简要介绍了 10 款   ...

  8. huggingface实操_盘点2018年度GtiHub开源项目TOP 25

    本文作者 Pranav Dar 是 Analytics Vidhya 的编辑,对数据科学和机器学习有较深入的研究和简介,致力于为使用机器学习和人工智能推动人类进步找到新途径.2018 这一年中,作者在 ...

  9. python潜力开源项目_比较了1000多个Python开源项目,精选出这34个

    传智播客博学谷 微信号:boxuegu- get最新最全的IT技能 免费领取各种视频资料 在过去的一年里,Mybridge比较了近1000个的Python开源库,并从中评选出34个最有用的工具来帮助你 ...

最新文章

  1. C语言之结构体以及结构体对齐访问
  2. 第一次作业词频分析之王熹篇
  3. es mysql延迟_ES 近实时搜索 更新延迟问题
  4. 【Python】青少年蓝桥杯_每日一题_9.11_买鸡
  5. SAP Hybris Commerce里类似ABAP里的透明表设计
  6. ImageIO 框架详细解析
  7. python 文本处理库_实用又好用,6 款 Python 特殊文本格式处理库推荐
  8. 拼多多回应驰伟插座起诉:积极应诉 希望其莫充当电商“二选一”插头
  9. 怎么改wps表格中折线图的横坐标?
  10. 休闲娱乐的计算机配置,入门APU主机配置 1199元双核APU家用娱乐电脑配置推荐
  11. fire.php,php代码调试利器firephp安装与使用方法分析
  12. luogu P1908 逆序对
  13. Linux下rpm、yum和源码三种安装方式详细介绍
  14. 非线性系统 知识梳理
  15. Remove annoying AD window when PopKart exits
  16. macOS + andriod studio + NDK
  17. Python动态图见得多了?Excel:亦可赛艇!我可是身经百战了
  18. Windows Phone 游戏 Roll In The Hole 去除 XBL 服务
  19. 作为一位软件测试工程师,应当需要哪些能力?
  20. 新星计划Day2【JavaSE】 枚举类与注解

热门文章

  1. 谷歌牵手265解密:双方将合作推广Adsence
  2. 高级查询(二)+php中文网,MySQL高级查询方法之记录查询
  3. 网络服务器怎么修改ip,怎么改变自己的IP地址?
  4. mxGraph xml to json方法
  5. surging教学视频资源汇总
  6. FreeCAD FEM(Elmer接口)总结
  7. java网上销售外文文献_JAVA外文文献+翻译.docx
  8. C++ OpenCV特征提取之KAZE和AKAZE的匹配
  9. C语言中的restrict限定符
  10. 浏览器Goole Chrome调试工具