Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将java注释处理器集成到java插件中_Java_Hibernate_Gradle - Fatal编程技术网

如何将java注释处理器集成到java插件中

如何将java注释处理器集成到java插件中,java,hibernate,gradle,Java,Hibernate,Gradle,我有一个项目,计划如下: src/ java generated src/java包含使用由生成的jpa元模型类的jpa实体和查询类 将注释处理合并到java插件中的最佳方法是什么 我目前定义了以下任务,但它对compileJava有一个任务依赖关系,这将失败,因为一些代码依赖于注释处理器生成的类 task processAnnotations(type: Compile) { genDir = new File("${projectDir}/src/generated")

我有一个项目,计划如下:

src/
  java
  generated
src/java包含使用由生成的jpa元模型类的jpa实体和查询类

将注释处理合并到java插件中的最佳方法是什么

我目前定义了以下任务,但它对compileJava有一个任务依赖关系,这将失败,因为一些代码依赖于注释处理器生成的类

task processAnnotations(type: Compile) {
    genDir = new File("${projectDir}/src/generated")
    genDir.mkdirs()
    source = ['src/java']
    classpath = sourceSets.test.compileClasspath
    destinationDir = genDir
    options.compilerArgs = ["-proc:only"]
}

processAnnotations
依赖于
compileJava
的原因是您将测试编译类路径放在前一个任务的编译类路径上,并且测试编译类路径包含编译后的生产代码(即
compileJava
的输出)

至于如何最好地解决手头的问题,您不需要单独的编译任务。Java编译器可以一次调用注释处理器并编译其生成的源代码(以及原始源代码)(请参阅)。您需要做的一件事是将注释处理器放在编译类路径上:

configurations {
    hibernateAnnotationProcessor
}

dependencies {
    hibernateAnnotationProcessor "org.hibernate: ..."
}

compileJava.compileClasspath += configurations.hibernateAnnotationProcessor
(您不希望将注释处理器添加到
compile
配置中,因为这样会将其视为生产代码的依赖项。)


据我所知,这就是它的全部功能(假设您使用的是JDK6或更高版本)。

这里有一个简单的设置,可以与netbeans无缝集成。Javac将基本上完成所有需要的工作,无需太多干预。其余的都是一些小技巧,可以与Netbeans等IDE一起使用

apply plugin:'java'

dependencies {
    // Compile-time dependencies should contain annotation processors
    compile(group: 'org.hibernate...', name: '...', version: '...')
}

ext {
    generatedSourcesDir = file("${buildDir}/generated-sources/javac/main/java")
}

// This section is the key to IDE integration.
// IDE will look for source files in both in both
//
//  * src/main/java
//  * build/generated-sources/javac/main/java
//
sourceSets {
    main {
        java {
            srcDir 'src/main/java'
            srcDir generatedSourcesDir
        }
    }
}

// These are the only modifications to build process that are required.
compileJava {
    doFirst {
        // Directory should exists before compilation started.
        generatedSourcesDir.mkdirs()
    }
    options.compilerArgs += ['-s', generatedSourcesDir]
}

就这样。Javac将完成剩余的工作。

从gradle 4.6开始,您只需在适当的配置中定义处理器的依赖关系:

dependencies {
    ...

    annotationProcessor 'org.hibernate:hibernate-jpamodelgen:4.3.7.Final'
}

Ref:

我执行了单个任务的路径,但在编译时遇到了一个无效的flag-s错误。所以我把它作为一项单独的任务。但是你提供的信息帮助很大。谢谢。这对我来说部分有效。我还必须用类似的方式告诉编译器我的处理器:
compileJava.options.compilerArgs=[“-processor”,“full.qualified.processor.path.MyProcessor”]