如何成功集成Gradle,MapStruct 1.3.1和Eclipse 2020-03?

问题描述 投票:0回答:1

是否有文档或示例说明如何成功地将MapStruct 1.3.1与Eclipse 2020-03和Gradle / Buildship集成在一起,并描述生成MapStruct实现类需要做什么?我已经做了相当多的搜索和阅读工作,但是尝试了很多事情似乎都无法做到。

我的项目设置是Gradle多项目设置的项目,在我尝试通过Gradle添加MapStruct之前,它工作正常。我的项目中有带有注释的JAX-RS REST类,并且我看到的问题似乎以某种方式与注释处理有关,因为构建失败并出现REST类中注释的编译错误(请参阅异常输出)下面)。

任何指针,进一步的阅读,修复都值得欢迎和赞赏。

当我从Eclipse的Gradle Tasks视图中运行相关的build任务时得到的异常是:

D:\<placeholder>\PlanContractualDetails.java:527: error: cannot find symbol
  @ApiModelProperty(example = "null", required = true, value = "True - life time investment option phasing applicable. Please note that this value will be always populated by using the active LTIO on the plan, irrespective of the effectiveDate passed by the caller.")
   ^
  symbol:   class ApiModelProperty
  location: class PlanContractualDetails
100 errors

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':epsilon-plan-service:compileJava'.
> Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.3/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 563ms
1 actionable task: 1 executed

我的build.gradle如下:

/*
 * Project build file.
 */

 /* Plugin configuration */
plugins {
    id 'java'
    id 'war'
    id 'eclipse-wtp'
}

sourceCompatibility = JavaVersion.VERSION_1_8
/* Project dependencies */
dependencies { 

    compile "org.mapstruct:mapstruct-jdk8:${mapstructVersion}"
    testCompile 'org.testng:testng:6.10', 'org.easytesting:fest-assert:1.4'
    compile "org.mapstruct:mapstruct-processor:${mapstructVersion}"

    compile "javax.ws.rs:javax.ws.rs-api:2.0.1"
    providedCompile "javax.servlet:javax.servlet-api:3.1.0" 

    // --- Mapstruct ---------------------------------
    // https://mvnrepository.com/artifact/org.mapstruct/mapstruct-jdk8
     //compile group: 'org.mapstruct', name: 'mapstruct-jdk8', version: '1.3.1.Final'
    // https://mvnrepository.com/artifact/org.mapstruct/mapstruct-processor
    //compile group: 'org.mapstruct', name: 'mapstruct-processor', version: '1.3.1.Final'
    //compile "org.mapstruct:mapstruct:${mapstructVersion}"

    // If you are using mapstruct in test code
    //testAnnotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}"
    //compileOnly("org.mapstruct:mapstruct-jdk8:${mapstructVersion}")
    //annotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}"

    //compileOnly "javax:javaee-api:${javaee_api_version}"
}

tasks.withType(JavaCompile) {
    options.compilerArgs = [
            '-Amapstruct.suppressGeneratorTimestamp=true'
    ]
}

sourceSets.main.java.srcDirs += 'src'
//sourceSets.main.kotlin.srcDirs += myDir

/* Eclipse configuration */
ext.outputDir = 'src/main/webapp/WEB-INF/classes'
eclipse {
/*
    project {
        natures 'org.eclipse.buildship.core.gradleprojectnature'

        //buildCommands.clear();
        //buildCommand 'org.eclipse.buildship.core.gradleprojectbuilder'
    }
*/
    classpath {
        defaultOutputDir = file("${outputDir}")
        file.whenMerged {
            entries.each {
                source ->
                    // This seems kludgy.
                    if (source.kind == 'src' && source.toString().contains('output=') && source.output.contains("${eclipse_default_output_dir}")) {
                        source.output = "${outputDir}"
                    }
            }
        }
    }

    /* 

        Deal with project facets.
        See: https://stackoverflow.com/questions/48828869/how-to-convert-java-gradle-project-to-dynamic-web-project
        And: https://discuss.gradle.org/t/easily-customize-the-eclipse-wtp-facet-version/8690
        And: https://github.com/gradle/gradle/issues/1334
    */
  wtp {
    facet {
      file {
        withXml {
            /* 
                Ensure that the Eclipse facet metadata in the file .settings/org.eclipse.wst.common.project.facet.core.xml
                is preserved after running this build script. This is needed as Gradle overwrites this file and defaults 
                some of the entries to older versions which may result in both Eclipse metadata and Gradle build errors.                    
            */
            def node = it.asNode()
            /*
                This runtime facet is specifically for Eclipse projects such as a Dynamic Web Project project created 
                for development, deployment and debugging on WebSphere Application Server traditional V9.0.

                The name: must correspond to the name Properties -> Project Facets -> Runtimes tab entry 
                that is ticked for this Eclipse project.
            */
                node.appendNode('runtime', [name: 'WebSphere Application Server traditional V9.0'])
            }
            def oldJstWebFacet = facets.findAll {
                it.name == 'jst.web' && it.version == '2.4'
            }
            facets.removeAll(oldJstWebFacet)
            facet name: 'jst.web', version: '3.1'

            /*
                Additional Eclipse project facets for WebSphere 9 traditional.
            */
            facet name: 'com.ibm.websphere.coexistence.web', version: '9.0'
            facet name: 'com.ibm.websphere.extended.web', version: '9.0'

            //facet name: 'java', version: '1.8'         
      }
    }
  }
}

test {
    useTestNG()
}```


是否有文档或示例,阐明了如何成功将MapStruct 1.3.1与Eclipse 2020-03和Gradle / Buildship集成,并描述了生成...所需的操作...]

eclipse gradle mapstruct
1个回答
0
投票

我的问题原来是不是

一个MapStruct问题,也与注释处理无关。在生成任何JAX-RS或MapStruct代码之前,我从头开始做了所有工作,测试了MapStruct Gradle配置并成功通过了。问题是我需要添加正确的JAX-RS依赖项!
© www.soinside.com 2019 - 2024. All rights reserved.