在Spring Boot项目中,我们使用Eclipselink作为ORM。我们将构建配置为静态编织并打包为jar。有趣的是,使用mvn spring-boot:run
启动程序没有问题,但从java -jar archive.jar
开始只有在persistence.xml中列出所有实体时才有效。如果没有persistence.xml中的类,我会收到错误:
java.lang.IllegalArgumentException: No [ManagedType] was found for the key class [eltest.Customer] in the Metamodel - please verify that the [Managed] class was referenced in persistence.xml using a specific <class>eltest.Customer</class> property or a global <exclude-unlisted-classes>false</exclude-unlisted-classes> element
同样在这种情况下,当我们将程序打包为战争时,它会毫无问题地启动。
我的问题是:mvn spring-boot:run
是否完全调用静态编织,还是在加载时编织?与战争部署相同:当Tomcat启动应用程序时,war-build是否真的调用静态编织,还是隐式触发编织?有没有办法避免在persistence.xml中列出类,还是在jar包装中进行静态编织?
以下是一个例子:
https://github.com/gfinger/eltest
使用mvn clean package
构建它。如果以mvn spring-boot:run
启动它,它使用Spring Data Rest将Customer实体公开为REST资源。如果您使用java -jar target/static-eclipselink-0.0.1-SNAPSHOT.jar
启动它,则会收到错误。