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

How to enhance a class from a separate jar at build time with openJPA?

我正在尝试使用 Maven 插件 openjpa-maven-plugin 增强来自另一个 Jar 的实体 class,不幸的是我没有找到正确的方法。

我有一个来自模块 MyDomain 的 class MyPojo 打包在 jar 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>

并且我正在使用在 persistence.xml 中声明的 XML 映射 orm.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 给出以下错误:

This configuration disallows runtime optimization, but the following listed types were not enhanced at build time or at class load time with a javaagent:

当我将 class MyPojo 移动到项目 MyJpa(而不是项目 MyDomain)时,它起作用了。

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

what do I need to configure in order to be able to enhance at build time the class MyPojo coming from an external Jar ?

如果我对你的问题的理解正确,你无法在构建时增强存在于 jar 中的 class。如果你想以这种方式增强,你需要解压缩 class,增强,然后重新压缩。