org.bsc.maven.maven-processor-plugin doesn't work for java 1.7 and above

5k Views Asked by At

I have a GitHub repository where I host some Hibernate examples and to generate the JPA MetaModel classes I've been using the following Maven plugin:

<plugin>
    <groupId>org.bsc.maven</groupId>
    <artifactId>maven-processor-plugin</artifactId>
    <version>2.0.5</version>
    <executions>
        <execution>
            <id>process</id>
            <goals>
                <goal>process</goal>
            </goals>
            <phase>generate-sources</phase>
            <configuration>
                <outputDirectory>target/generated-sources/java/</outputDirectory>
                <processors>
                    <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
                    </processor>
                </processors>
            </configuration>
        </execution>
    </executions>
</plugin>

With Java 1.6 everything runs just fine, but when I switch to Java 1.7 I get the following error:

[INFO] javac option: D:\wrk\vladmihalcea\vladmihalcea.wordpress.com\hibernate-facts\target\generated-sources\java
[INFO] diagnostic Note: Hibernate JPA 2 Static-Metamodel Generator 1.0.0.Final
[INFO] diagnostic warning: Supported source version 'RELEASE_6' from annotation processor 'org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor' less than -source '1.7'
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.store.Version_' created in the last round will not be subject to annotation processing.
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.baglist.BagTree_' created in the last round will not be subject to annotation processing.
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.store.Product_' created in the last round will not be subject to annotation processing.
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.store.Importer_' created in the last round will not be subject to annotation processing.
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.linkedset.LinkedParent_' created in the last round will not be subject to annotation processing.
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.fetch.FetchChild_' created in the last round will not be subject to annotation processing.
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.store.Company_' created in the last round will not be subject to annotation processing.
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.store.SubVersion_' created in the last round will not be subject to annotation processing.
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.baglist.BagLeaf_' created in the last round will not be subject to annotation processing.
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.indexlist.Branch_' created in the last round will not be subject to annotation processing.
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.linkedset.LinkedChild_' created in the last round will not be subject to annotation processing.
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.indexlist.Tree_' created in the last round will not be subject to annotation processing.
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.bag.Child_' created in the last round will not be subject to annotation processing.
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.baglist.BagForest_' created in the last round will not be subject to annotation processing.
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.indexlist.Leaf_' created in the last round will not be subject to annotation processing.
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.bag.Parent_' created in the last round will not be subject to annotation processing.
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.eagerset.SetParent_' created in the last round will not be subject to annotation processing.
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.store.WarehouseProductInfo_' created in the last round will not be subject to annotation processing.
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.eagerset.SetChild_' created in the last round will not be subject to annotation processing.
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.fetch.FetchParent_' created in the last round will not be subject to annotation processing.
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.store.Image_' created in the last round will not be subject to annotation processing.
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.baglist.BagBranch_' created in the last round will not be subject to annotation processing.
[INFO] diagnostic warning: File for type 'com.vladmihalcea.hibernate.model.indexlist.Forest_' created in the last round will not be subject to annotation processing.
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hibernate-facts ---
[WARNING] Using platform encoding (Cp1250 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 3 resources
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ hibernate-facts ---
[WARNING] File encoding has not been set, using platform encoding Cp1250, i.e. build is platform dependent!
[INFO] Compiling 52 source files to D:\wrk\vladmihalcea\vladmihalcea.wordpress.com\hibernate-facts\target\classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] D:\wrk\vladmihalcea\vladmihalcea.wordpress.com\hibernate-facts\target\classes\com\vladmihalcea\hibernate\model\store\Version_.java:[8,16] error: duplicate class: com.vladmihalcea.hibernate.model.store.Version_

The metamodel classes are generated twice:

D:\wrk\vladmihalcea\vladmihalcea.wordpress.com\hibernate-facts\target\classes\com\vladmihalcea\hibernate\model\bag\Child_.java 
D:\wrk\vladmihalcea\vladmihalcea.wordpress.com\hibernate-facts\target\generated-sources\java\com\vladmihalcea\hibernate\model\bag\Child_.java 

Do you know any possible fix?

1

There are 1 best solutions below

0
On BEST ANSWER

I managed to get it working like this:

<profiles>
    <profile>
        <id>jdk16</id>
        <activation>
            <jdk>1.6</jdk>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.bsc.maven</groupId>
                    <artifactId>maven-processor-plugin</artifactId>
                    <version>2.0.5</version>
                    <executions>
                        <execution>
                            <id>process</id>
                            <goals>
                                <goal>process</goal>
                            </goals>
                            <phase>generate-sources</phase>
                            <configuration>
                                <outputDirectory>target/generated-sources/java/</outputDirectory>
                                <processors>
                                    <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
                                    </processor>
                                </processors>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
    <profile>
        <id>default</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <compilerArguments>
                            <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
                        </compilerArguments>
                    </configuration>
                    <executions>
                        <execution>
                            <id>process</id>
                            <phase>generate-sources</phase>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

The maven-processor-plugin is activated for JDK 1.6, while by default it's the maven-compiler-plugin to apply the JPA Meta Model post processing.