热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

IntelliJ和Gradle中的注释处理器

如何解决《IntelliJ和Gradle中的注释处理器》经验,为你挑选了3个好方法。

tl; dr:我无法配置IntelliJ来生成与gradle相同的目录中的java文件

我有一个使用immutables注释处理器的小项目.它在gradle命令行构建中按预期工作,但我无法让IntelliJ将生成的文件输出到同一目录.

整个项目可在GitLab上获得

Gradle配置:
我使用以下gradle插件:

gradle-idea插件,用于处理构思配置

gradle-apt-plugin,提供apt配置并处理与注释处理相关的编译类路径和构思配置(如果还应用了构思插件)

build-script的相关部分(链接到完整列表):

apply plugin: 'java'
apply plugin: "net.ltgt.apt"
apply plugin: 'idea'

dependencies {
    def immutablesVersion = '2.3.9'
    compileOnly "org.immutables:value:$immutablesVersion:annotations"
    compileOnly "org.immutables:encode:$immutablesVersion"
    apt "org.immutables:value:$immutablesVersion"
}

当我开始时./gradlew build一切都如预期: 在此输入图像描述

    DataEncoding.java处理源文件,生成的java文件DataEncodingEnabled.java最终进入

    /build/generated/source/apt/main 根据预期的方案 com.tmtron.immutables.data

    并且生成的文件也被编译为.class文件

在IntelliJ中,我按照gradle-apt-plugin文档的建议激活注释处理: 在此输入图像描述

然后我执行./gradlew clean以确保先前的文件已经消失然后我单击Build- Build Project在IntelliJ中.
执行注释处理器,但问题是生成的java文件最终位于错误的位置: 在此输入图像描述

它位于:/ build/generated/source/apt/main/build/generated/source/apt/main /com.tmtron.immutables.data
,粗体部分是多余的.

我做错了什么以及如何正确设置,以便IntelliJ和gradle在同一目录中生成文件?

笔记:

我当然已经尝试将IntelliJ注释配置中的"生成源目录"留空,但是它不起作用:然后它会自动使用"生成"而我最终也会得到错误的路径.

IntelliJ版本2016.3.4

TmTron.. 13


自Gradle 5.2以来更新2.2019有一个简单的方法 - 请参阅gavenkoa的回答

更新5.2018

我知道最简单的方法是使用apt-idea插件

只需激活build.gradle文件中的插件:

plugins {
    id 'java'
    id 'net.ltgt.apt-idea' version "0.15"
}

然后将注释处理器添加到annotationProcessor配置中:

final DAGGER_VER = '2.16'
dependencies {
    implementation "com.google.dagger:dagger:${DAGGER_VER}"
    annotationProcessor"com.google.dagger:dagger-compiler:${DAGGER_VER}"
}

GitHub上的测试项目:ex.dagger
(使用IntelliJ 2018.1.4,Gradle 4.7)

ORIG ANSWER

使用parent-dir有一个简单的解决方法,在IntelliJ 2016.3.4中可以正常工作

生产来源目录: ../main

测试源目录: ../test

现在gradle和IntelliJ将生成相同目录的代码.

在GitLab项目V0.0.2中修复

另见:apt-gradle-plugin问题#35



1> TmTron..:


自Gradle 5.2以来更新2.2019有一个简单的方法 - 请参阅gavenkoa的回答

更新5.2018

我知道最简单的方法是使用apt-idea插件

只需激活build.gradle文件中的插件:

plugins {
    id 'java'
    id 'net.ltgt.apt-idea' version "0.15"
}

然后将注释处理器添加到annotationProcessor配置中:

final DAGGER_VER = '2.16'
dependencies {
    implementation "com.google.dagger:dagger:${DAGGER_VER}"
    annotationProcessor"com.google.dagger:dagger-compiler:${DAGGER_VER}"
}

GitHub上的测试项目:ex.dagger
(使用IntelliJ 2018.1.4,Gradle 4.7)

ORIG ANSWER

使用parent-dir有一个简单的解决方法,在IntelliJ 2016.3.4中可以正常工作

生产来源目录: ../main

测试源目录: ../test

现在gradle和IntelliJ将生成相同目录的代码.

在GitLab项目V0.0.2中修复

另见:apt-gradle-plugin问题#35



2> gavenkoa..:

现在https://github.com/tbroyer/gradle-apt-plugin指出:

该插件的目标是最终不再需要,已被内置功能取代。随着Gradle 5.2IntelliJ IDEA 2019.1成为现实。

所以:

dependencies {
  compile("com.google.dagger:dagger:2.18")
  annotationProcessor("com.google.dagger:dagger-compiler:2.18")

  compileOnly("com.google.auto.factory:auto-factory:1.0-beta6")
  annotationProcessor("com.google.auto.factory:auto-factory:1.0-beta6")

  compileOnly("org.immutables:value-annotations:2.7.1")
  annotationProcessor("org.immutables:value:2.7.1")
}

compileOnly如果使用注释,compile则必须使用Gradle 4.6中annotationProcessor引入的类。

要启用处理特定的编译任务:

compileJava {
    options.annotatiOnProcessorPath= configurations.annotationProcessor
}

禁用:

  compileTestJava {
      options.compilerArgs += '-proc:none'
  }



3> de.la.ru..:

嘿,每个人我都有同样的问题,并找到了解决此问题的干净方法。我正在使用两个需要批注处理的库(Lombok和MapStruct)。

我的IntelliJ也是2019.1(如果年纪较大,请更新)和Gradle 5.2.1。

首先让我们配置IntelliJ:

    在设置中禁用注释处理,因为我们将所有内容委托给Gradle:

    将IDE操作委托给Gradle:

最后一步是在Gradle中正确配置依赖项。

    Gradle中的Dependencies部分:

现在,您可以从命令行和IDE中执行“生成和运行”。

干杯!


推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
author-avatar
杜伟丿2552
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有