如何使用openJPA在构建时从单独的jar中增强类?

时间:2015-08-26 14:37:32

标签: maven jpa openjpa openjpa-maven-plugin

我正在尝试使用maven插件openjpa-maven-plugin来增强来自另一个Jar的Entity类,不幸的是我没有找到正确的方法来执行它。

我在jar MyPojo打包的模块MyDomain中有一个类my-domain.jar

public class MyPojo {

private Long id;

...

}

在我的第二个项目MyJpa打包my-jpa.jar中,它取决于模块my-domain.jar,Maven配置为使用Build Time OpenJPA Enhancer,具体如下:

<plugin>
            <groupId>org.apache.openjpa</groupId>
            <artifactId>openjpa-maven-plugin</artifactId>
            <configuration>
                <includes>**/entity/*.class</includes>
                <addDefaultConstructor>true</addDefaultConstructor>
                <enforcePropertyRestrictions>true</enforcePropertyRestrictions>
            </configuration>
            <executions>
                <execution>
                    <id>enhancer</id>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>enhance</goal>
                    </goals>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>org.apache.openjpa</groupId>
                    <artifactId>openjpa</artifactId>
                    <version>2.3.0</version>
                </dependency>
            </dependencies>
        </plugin>

我正在使用orm.xml中声明的XML映射persistence.xml

            ... 
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>

    <mapping-file>META-INF/orm.xml</mapping-file>

 ...

和orm.xml看起来像:

    <entity class="MyPojo" access="FIELD">
    <table name="MYPOJO"/>
    <attributes>
        <id name="id">
            <generated-value strategy="AUTO"/>
        </id>
    </attributes>
    </entity>

运行mvn install会出现以下错误:

  

此配置不允许运行时优化,但在构建时或使用javaagent在类加载时未增强以下列出的类型:

当我将班级MyPojo移动到项目MyJpa(而不是项目MyDomain)时,它可以正常工作。

所以我的问题是:我需要配置什么才能在构建时增强来​​自外部Jar的类MyPojo

1 个答案:

答案 0 :(得分:4)

  

我需要配置什么才能在构建时增强来​​自外部Jar的MyPojo类?

如果我正确理解你的问题,你就无法在构建时增强一个生活在jar内部的类。如果你想以这种方式增强,你需要解开课程,增强,然后重新开始。