欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Idea的Generate Sources無(wú)法生成QueryDSL問(wèn)題及解決方法

 更新時(shí)間:2020年02月04日 09:13:29   作者:棲息之鷹  
這篇文章主要介紹了解決Idea的Generate Sources無(wú)法生成QueryDSL問(wèn)題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

QueryDSL簡(jiǎn)介

官網(wǎng)

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

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

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

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

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

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

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

  參考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 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”實(shí)際上是用所有可以生成source的插件執(zhí)行Maven的generate-sources步驟

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

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

2. 那么第二個(gè)問(wèn)題來(lái)了,我們的項(xiàng)目中哪些plugin可以執(zhí)行g(shù)enerate sources?

     很容易找到下面的配置(此插件開(kāi)源在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的解釋很簡(jiǎn)單:apt-maven-plugin provides Maven integration of the Java 6 APT functionality.

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

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

目前比較流行的Dagger2, ButterKnife, EventBus3都是采用APT技術(shù),對(duì)運(yùn)行時(shí)的性能影響很小
也就是說(shuō),APT是用代碼生成代碼的工具,會(huì)在process過(guò)程生成java文件,那么為什么我們最終生成的往往只有class文件呢?這是因?yàn)楹芏嗖寮甲隽说诙降那謇聿僮鳌?br />

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

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

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

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

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

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

  會(huì)發(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,生成成功!

通過(guò)解決此問(wèn)題得到一點(diǎn)感觸:每一次出現(xiàn)問(wèn)題不好解決時(shí),嘗試從原理層面做一個(gè)快速全面的了解,這樣不單會(huì)有助于使自己對(duì)于技術(shù)“知其所以然”,而且會(huì)反過(guò)來(lái)觸發(fā)解決問(wèn)題的新思路。

總結(jié)

以上所述是小編給大家介紹的Idea的Generate Sources無(wú)法生成QueryDSL問(wèn)題及解決方法,希望對(duì)大家有所幫助!

相關(guān)文章

  • 如何在java中使用SFTP協(xié)議安全的傳輸文件

    如何在java中使用SFTP協(xié)議安全的傳輸文件

    這篇文章主要介紹了如何在java中使用SFTP協(xié)議安全的傳輸文件,幫助大家更好的理解和使用JSch,感興趣的朋友可以了解下
    2020-10-10
  • Spring Aop組成部分及實(shí)現(xiàn)步驟

    Spring Aop組成部分及實(shí)現(xiàn)步驟

    面向切面編程,是對(duì)面向?qū)ο缶幊痰囊环N補(bǔ)充,是一種編程思想,是對(duì)某一類(lèi)的事情的集中處理,這篇文章主要介紹了Spring Aop組成部分及實(shí)現(xiàn)步驟,需要的朋友可以參考下
    2023-08-08
  • SpringBoot中Mybatis注解一對(duì)多和多對(duì)多查詢實(shí)現(xiàn)示例

    SpringBoot中Mybatis注解一對(duì)多和多對(duì)多查詢實(shí)現(xiàn)示例

    這篇文章主要介紹了SpringBoot中Mybatis注解一對(duì)多和多對(duì)多查詢的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • 淺析java中String類(lèi)型中“==”與“equal”的區(qū)別

    淺析java中String類(lèi)型中“==”與“equal”的區(qū)別

    這篇文章主要介紹了淺析java中String類(lèi)型中“==”與“equal”的區(qū)別,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 記一次springboot配置redis項(xiàng)目啟動(dòng)時(shí)的一個(gè)奇怪的錯(cuò)誤

    記一次springboot配置redis項(xiàng)目啟動(dòng)時(shí)的一個(gè)奇怪的錯(cuò)誤

    這篇文章主要介紹了spring?boot配置redis項(xiàng)目啟動(dòng)時(shí)的一個(gè)奇怪的錯(cuò)誤,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 關(guān)于@SpringBootApplication詳解

    關(guān)于@SpringBootApplication詳解

    這篇文章主要介紹了關(guān)于@SpringBootApplication的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Map映射LinkedHashSet與LinkedHashMap應(yīng)用解析

    Map映射LinkedHashSet與LinkedHashMap應(yīng)用解析

    這篇文章主要為大家介紹了Map映射LinkedHashSet與LinkedHashMap的應(yīng)用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步
    2022-03-03
  • SpringBoot中的@PostConstruct注解詳細(xì)解析

    SpringBoot中的@PostConstruct注解詳細(xì)解析

    這篇文章主要介紹了SpringBoot中的@PostConstruct注解詳細(xì)解析,@PostConstruct注解,主要用于在Spring容器啟動(dòng)時(shí)執(zhí)行某些操作或者任務(wù),@PostConstruct注解一般放在BEAN的方法上,一旦BEAN初始化完成之后,將會(huì)調(diào)用這個(gè)方法,需要的朋友可以參考下
    2024-01-01
  • Java中ThreadLocal避免內(nèi)存泄漏的方法詳解

    Java中ThreadLocal避免內(nèi)存泄漏的方法詳解

    ThreadLocal是Java中的一個(gè)線程本地存儲(chǔ)機(jī)制,它允許每個(gè)線程擁有一個(gè)獨(dú)立的本地存儲(chǔ)空間,用于存儲(chǔ)該線程的變量,本文主要介紹了ThreadLocal如何避免內(nèi)存泄漏,需要的朋友可以參考下
    2023-05-05
  • Java equals 方法與hashcode 方法的深入解析

    Java equals 方法與hashcode 方法的深入解析

    面試時(shí)經(jīng)常會(huì)問(wèn)起字符串比較相關(guān)的問(wèn)題,比如:字符串比較時(shí)用的什么方法,內(nèi)部實(shí)現(xiàn)如何?hashcode的作用,以及重寫(xiě)equal方法,為什么要重寫(xiě)hashcode方法?以下就為大家解答,需要的朋友可以參考下
    2013-07-07

最新評(píng)論