Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get Eclipse to generate MapStruct Mappers using Gradle

Is there any special copnfiguration to get eclipse to generate the Mapstruct mappers? Curently they are not being generated.

They do generate in a gradle build but I cannot get them to generate so I can use them in development.

I added this to my build.gradle:

plugins {
    id "net.ltgt.apt" version "0.10"
}
dependencies {
    compile "org.mapstruct:mapstruct-jdk8:$mapstructVersion"
    apt "org.mapstruct:mapstruct-processor:$mapstructVersion"
}

I also added the eclipse plugin for MapStruct (although I belive that this is not actually required???)

I then went Project > Properties > Java Compiler > Annotation Processing:

screenshot

But .apt_generated is empty, what am I missing?

I'm using:

Eclipse: Version: Oxygen Release (4.7.0) Build id: 20170620-1800

MapStruct version 1.2.0.CR1 (also tries 1.1.0.FINAL)

like image 224
Neilos Avatar asked Aug 05 '17 04:08

Neilos


1 Answers

So after a bit of searching I determined that the solution is that you have to manually run the eclipse task in gradle. You should then see similar to the following if it is successful:

enter image description here

The solution came from reading https://github.com/tbroyer/gradle-apt-plugin docs which states:

When using Buildship, you'll have to manually run the eclipseJdtApt and eclipseFactorypath tasks to generate the Eclipse configuration files, then either run the eclipseJdt task or manually enable annotation processing: in the project properties → Java Compiler → Annotation Processing, check Enable Annotation Processing. Note that while all those tasks are depended on by the eclipse task, that one is incompatible with Buildship, so you have to explicitly run the two or three aforementioned tasks and not run the eclipse task.

It states that the eclipse task is incompatible with buildship but that seems to be fixed (I ran the eclipse task and had no issues):

enter image description here

I did however have issues with the cleanEclipse task which does seem to be incompatible with Buildship.

After all this the *MapperImpl.java classes are generated in <project_root>/.apt_generated

like image 184
Neilos Avatar answered Oct 05 '22 22:10

Neilos