无法 运行 使用 Spring 引导静态增强 OpenJPA 实体

Cannot run static enhancement of OpenJPA entities with Spring Boot

当我尝试在 Spring 引导应用程序中增强我的 JPA 实体时,

mvn packageopenjpa-maven-plugin:enhance 阶段失败。

错误描述很长

enhance failed: MetaDataFactory could not be configured (conf.newMetaDataFactoryInstance() returned null).

no configuration properties were found.

它列出了一些原因:

  1. Ensure that you have a META-INF/persistence.xml file, that it is available in your classpath

    • 我正在使用 spring-data-jpa 和 Java 配置,但没有
      persistence.xml没有
      是否可以做到openjpa:enhance 它?
  2. Ensure the properties file you are using for configuration is available. If you are using Ant, please see the or attributes of the task's nested element.

  3. This can also occur if your OpenJPA distribution jars are corrupt, or if your security policy is overly strict.

    • 排除了 - 我用 checksumPolicy=fail 检查了重新下载的 OpenJPA 罐子,这证明它们没有损坏,而且我没有在这个级别使用任何安全策略。

pom.xml

        <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>
        </plugin>

openjpa-maven-plugin 错误

[INFO] --- openjpa-maven-plugin:2.4.1:enhance (enhancer) @ project-x ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16.707 s
[INFO] Finished at: 2016-12-15T09:51:36+00:00
[INFO] Final Memory: 44M/359M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.openjpa:openjpa-maven-plugin:2.4.1:enhance 
(enhancer) on project x: Execution enhancer of goal org.apache.openjpa:openjpa-maven-plugin:2.4.1:enhance 
failed: MetaDataFactory could not be configured (conf.newMetaDataFactoryInstance()
returned null). This might mean that no configuration properties were found. Ensure that 
you have a META-INF/persistence.xml file, that it is available in your classpath, or that
the properties file you are using for configuration is available. If you are using Ant,
please see the <properties> or <propertiesFile> attributes of the task's nested <config>
element. This can also occur if your OpenJPA distribution jars are corrupt, or if your
security policy is overly strict. -> [Help 1]

JpaBaseConfiguration

的子class
@Import({
        LdapConfig.class,
        SecurityConfig.class,
        PropertySpringConfig.class
})
@SpringBootApplication
@EnableJpaRepositories(basePackages = {"com.adam.x.repository"})
@EntityScan(basePackages = {"com.adam.x.entity"})
public class MyWebApplication extends JpaBaseConfiguration {

    public static void main(String[] args) {
        SpringApplication.run(MyWebApplication.class, args);
    }

    protected MyWebApplication(
            DataSource dataSource,
            JpaProperties properties,
            ObjectProvider<JtaTransactionManager> jtaTransactionManagerProvider) {
        super(dataSource, properties, jtaTransactionManagerProvider);
    }

    @Override
    protected AbstractJpaVendorAdapter createJpaVendorAdapter() {
        OpenJpaVendorAdapter jpaVendorAdapter = new OpenJpaVendorAdapter();
        jpaVendorAdapter.setShowSql(true);
        return jpaVendorAdapter;

    }

    @Override
    protected Map<String, Object> getVendorProperties() {
        HashMap<String, Object> map = new HashMap<String, Object>();
        map.put("openjpa.Log", "DefaultLevel=TRACE, Tool=INFO, SQL=TRACE, Runtime=TRACE");
        map.put("openjpa.jdbc.MappingDefaults", "IndexLogicalForeignKeys=false,IndexDiscriminator=false");
//        map.put("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=true)");
        map.put("openjpa.RuntimeUnenhancedClasses", "supported");
//        map.put("openjpa.DynamicEnhancementAgent", "true");
//        map.put("openjpa.weaving", "false");
        return map;
    }


}

这里的回答帮我整理好了。

maven 插件需要 persistence.xml 才能工作,这有点不干,因为我必须记得在其中列出任何新的实体 bean,但我认为这是一个很小的代价。

OpenJPA and Spring-boot configuration