洞察如何利用移动警务平台提高安全保障效率,数字化转型助力合规运营
1215
2023-06-28
Idea的Generate Sources无法生成QueryDSL问题及解决方法
QueryDSL简介
官网
1 QueryDSL仅仅是一个通用的查询框架,专注于通过java API构建类型安全的SQL查询。
2 Querydsl可以通过一组通用的查询API为用户构建出适合不同类型ORM框架或者是SQL的查询语句,也就是说QueryDSL是基于各种ORM框架以及SQL之上的一个通用的查询框架。
3 借助QueryDSL可以在任何支持的ORM框架或者SQL平台上以一种通用的API方式来构建查询。目前QueryDSL支持的平台包括JPA,JDO,SQL,Java Collections,RDF,Lucene,Hibernate Search。
今天是2020年第一天在家办公,就出现了跟在公司不一样的现象,deploy项目到maven库时失败,之前一直成功。
查到原因在于QueryDSL类没有生成,但为何在公司可以而在家里就不行呢?
鉴于Idea的“Generate Sources And Update Folders”操作一闪即过,信息太少,所以不得先从原理上追溯
1. 首先的疑问是:当执行Idea的“Generate Sources And Update Folders”操作时,都发生了什么?
参考stackoverflow,解释如下
In order to get generated sources automatically imported as source folders configure corresponding plugins
so that they put them into target/generated-sources/, where subdir is any folder name you prefer.
The subdir folder is necessary to distinguish sources from different tools and also to exclude some http://special generated sources (e.g. groovy stubs).
Please note that even if you manually configure some source folders under target/generated-sources of this folder itself,
IDEA will rewrite them according to http://your pom.xml.
Any time you want to generate sources you simply execute the corresponding goal,
bound for generation (usually generate-sources, generate-test-sources). After that IDEA will pick up new folders and set them up.
As you can see Generate Sources action runs the generate-sources Maven phase for any plug-ins in your pom.xml that do generate any sources.
“Generate Source”实际上是用所有可以生成source的插件执行Maven的generate-sources步骤
这里需要了解的是Maven的phase都有哪些?generate-sources是什么时机执行的?
答案是generates阶段会在validate和compile阶段之http://间执行,详细可参考这里
2. 那么第二个问题来了,我们的项目中哪些plugin可以执行generate sources?
很容易找到下面的配置(此插件开源在github上)
github的解释很简单:apt-maven-plugin provides Maven integration of the Java 6 APT functionality.
这里有必要了解下什么是Java APT?
APT(Annotation Process Tool),是一种在代码编译时处理注解,按照一定的规则,生成相应的java文件,多用于对自定义注解的处理,
目前比较流行的Dagger2, ButterKnife, EventBus3都是采用APT技术,对运行时的性能影响很小
也就是说,APT是用代码生成代码的工具,会在process过程生成java文件,那么为什么我们最终生成的往往只有class文件呢?这是因为很多插件都做了第二步的清理操作。
至于Java8之后APT被“"Pluggable Annotation Processing API".”替换,那就是后话了
另外,此插件依赖querydsl,所以querydsl也有必要了解下
QueryDSL仅仅是一个通用的查询框架,专注于通过Java API构建类型安全的SQL查询。借助QueryDSL可以在任何支持的ORM框架或者SQL平台上以一种通用的API方式来构建查询。
目前QueryDSL支持的平台包括JPA,JDO,SQL,http://Java Collections,RDF,Lucene,Hibernate Search。
所以说我们项目中所用的QueryDSL是在JPA之上的,是为了补充JPA的复杂查询支持不足而引入的
3. 那么如何手动单独执行此APT的process呢?
这样考虑的目的其实就是为了得到更多信息,此步骤可以用Idea的此选项右键执行,或者在command中执行“mvn apt:process”
会发现输出log中输出以下警告
'build.plugins.plugin.version' for com.mysema.maven:apt-maven-plugin is missing. @ line 46, column 21
于是就在pom配置中添加plugin的最新version
再次generate,生成成功!
通过解决此问题得到一点感触:每一次出现问题不好解决时,尝试从原理层面做一个快速全面的了解,这样不单会有助于使自己对于技术“知其所以然”,而且会反过来触发解决问题的新思路。
总结
以上所述是给大家介绍的Idea的Generate Sources无法生成QueryDSL问题及解决方法,希望对大家有所帮助!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~