如何在构建时使用 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,增强,然后重新压缩。
我正在尝试使用 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,增强,然后重新压缩。