怎么Idea的GenerateSources無法生成QueryDSL問題

本篇內(nèi)容主要講解“怎么Idea的GenerateSources無法生成QueryDSL問題”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“怎么Idea的GenerateSources無法生成QueryDSL問題”吧!

創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的交口網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

QueryDSL簡介

官網(wǎng)

1 QueryDSL僅僅是一個通用的查詢框架,專注于通過Java API構(gòu)建類型安全的SQL查詢。

2 Querydsl可以通過一組通用的查詢API為用戶構(gòu)建出適合不同類型ORM框架或者是SQL的查詢語句,也就是說QueryDSL是基于各種ORM框架以及SQL之上的一個通用的查詢框架。

3 借助QueryDSL可以在任何支持的ORM框架或者SQL平臺上以一種通用的API方式來構(gòu)建查詢。目前QueryDSL支持的平臺包括JPA,JDO,SQL,Java Collections,RDF,Lucene,Hibernate Search。

今天是2020年第一天在家辦公,就出現(xiàn)了跟在公司不一樣的現(xiàn)象,deploy項目到maven庫時失敗,之前一直成功。

查到原因在于QueryDSL類沒有生成,但為何在公司可以而在家里就不行呢?

鑒于Idea的“Generate Sources And Update Folders”操作一閃即過,信息太少,所以不得先從原理上追溯

1. 首先的疑問是:當執(zhí)行Idea的“Generate Sources And Update Folders”操作時,都發(fā)生了什么?

參考stackoverflow,解釋如下

In order to get generated sources automatically imported as source folders configure corresponding pluginsso 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 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 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的插件執(zhí)行Maven的generate-sources步驟

這里需要了解的是Maven的phase都有哪些?generate-sources是什么時機執(zhí)行的?

答案是generates階段會在validate和compile階段之間執(zhí)行,詳細可參考這里

2. 那么第二個問題來了,我們的項目中哪些plugin可以執(zhí)行g(shù)enerate sources?

很容易找到下面的配置(此插件開源在github上)

<plugin>        <groupId>com.mysema.maven</groupId>        <artifactId>apt-maven-plugin</artifactId>        <executions>          <execution>            <goals>              <goal>process</goal>            </goals>            <configuration>              <outputDirectory>target/generated-sources/java</outputDirectory>              <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>            </configuration>          </execution>        </executions>        <dependencies>          <dependency>            <groupId>com.querydsl</groupId>            <artifactId>querydsl-apt</artifactId>            <version>4.1.3</version>          </dependency>

github的解釋很簡單:apt-maven-plugin provides Maven integration of the Java 6 APT functionality.

這里有必要了解下什么是Java APT?

APT(Annotation Process Tool),是一種在代碼編譯時處理注解,按照一定的規(guī)則,生成相應(yīng)的java文件,多用于對自定義注解的處理,

目前比較流行的Dagger2, ButterKnife, EventBus3都是采用APT技術(shù),對運行時的性能影響很小也就是說,APT是用代碼生成代碼的工具,會在process過程生成java文件,那么為什么我們最終生成的往往只有class文件呢?這是因為很多插件都做了第二步的清理操作。

至于Java8之后APT被“"Pluggable Annotation Processing API".”替換,那就是后話了  另外,此插件依賴querydsl,所以querydsl也有必要了解下

QueryDSL僅僅是一個通用的查詢框架,專注于通過Java API構(gòu)建類型安全的SQL查詢。借助QueryDSL可以在任何支持的ORM框架或者SQL平臺上以一種通用的API方式來構(gòu)建查詢。

目前QueryDSL支持的平臺包括JPA,JDO,SQL,Java Collections,RDF,Lucene,Hibernate Search。

所以說我們項目中所用的QueryDSL是在JPA之上的,是為了補充JPA的復(fù)雜查詢支持不足而引入的

3. 那么如何手動單獨執(zhí)行此APT的process呢?

這樣考慮的目的其實就是為了得到更多信息,此步驟可以用Idea的此選項右鍵執(zhí)行,或者在command中執(zhí)行“mvn apt:process”

會發(fā)現(xiàn)輸出log中輸出以下警告

'build.plugins.plugin.version' for com.mysema.maven:apt-maven-plugin is missing. @ line 46, column 21

于是就在pom配置中添加plugin的最新version

<version>1.1.3</version>

再次generate,生成成功!

到此,相信大家對“怎么Idea的GenerateSources無法生成QueryDSL問題”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)站題目:怎么Idea的GenerateSources無法生成QueryDSL問題
標題鏈接:http://muchs.cn/article38/jpjdsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、用戶體驗、定制網(wǎng)站自適應(yīng)網(wǎng)站、網(wǎng)站導(dǎo)航、網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)