store icon indicating copy to clipboard operation
store copied to clipboard

Entity and Wrapper code generators in Gradle - please document

Open hrstoyanov opened this issue 1 year ago • 3 comments

Please consider adding the below example code to the relevant ES documentation sections - it may save Gradle users headaches and frustrations.

A Gradle user migth attempt to add ES generators as per the Gradle docs like shown below (where all information is extracted from the codegen jar and manifest):

dependencies {
    annotationProcessor "org.eclipse.serializer:codegen-wrapping:1.3.1"
    annotationProcessor "org.eclipse.serializer:codegen-entity:1.3.1"
    implementation "org.eclipse.store:storage-embedded:1.3.1"
}

compileJava {
    options.compilerArgs += [
            '-Awrapper.types=org.eclipse.serializer.persistence.types.PersistenceStoring',
            '-Aentity.hashequalator=true',
            '-Aentity.appendable=true'
    ]
}

Unfortunately, this works for the codegen-wrapper, but not for codegen-entity, which is simply ignored by Gradle 8.6+. I filed a Gradle issue for that, and we need to see what the Gradle team says (but I suspect codegen-entity is ignored because it does not declare to really processes any annotations).

In the meantime, here is a workaround that works fine: adding explicit -processor option to the javac command line to point to the processor class(es). Here is an example of enabling both ES code generators (note how the processor classes are comma-separated):

dependencies {
    annotationProcessor "org.eclipse.serializer:codegen-wrapping:${eclipseSerializerVersion}"
    annotationProcessor "org.eclipse.serializer:codegen-entity:${eclipseSerializerVersion}"
    implementation "org.eclipse.store:storage-embedded:${eclipseStoreVersion}"
   // ... more dependencies

}

compileJava {
    options.compilerArgs += [
            '-Awrapper.types=org.eclipse.serializer.persistence.types.PersistenceStoring',
            '-Aentity.hashequalator=true',
            '-Aentity.appendable=true',
            '-processor', 'org.eclipse.serializer.codegen.wrapping.WrapperProcessor,org.eclipse.serializer.codegen.entity.EntityProcessor'
    ]
    options.annotationProcessorPath = configurations.annotationProcessor
}

hrstoyanov avatar Mar 23 '24 19:03 hrstoyanov

So this seems like a small bug in the EclipseStore annotation processor. Here is how to fix it:

https://github.com/gradle/gradle/issues/28553#issuecomment-2030045257

hrstoyanov avatar Apr 03 '24 03:04 hrstoyanov

fixed the erroneous annotation processor definition in PR https://github.com/eclipse-serializer/serializer/pull/123

hg-ms avatar Apr 03 '24 05:04 hg-ms

Thanks for the quick fix! You also may want to fix the docs, since now it should not be required (in both Maven and Gradle) to explicitly specify the processor class - the build tool should be able to figure it out by examining the jar only.

hrstoyanov avatar Apr 03 '24 18:04 hrstoyanov