所以我希望这是个简单的问题。我下载了openjpa-all-2.3.0.jar (和mysql-连接器-java-5.1.31-bin.jar),所以,我把它作为我的build.xml
<?xml version="1.0" ?>
<project name="reverser" default="reversemap" basedir=".">
<taskdef name="reversemappingtool" classname="org.apache.openjpa.jdbc.ant.ReverseMappingToolTask">
<classpath>
<pathelement location="${basedir}/mysql-connector-java-5.1.31-bin.jar" />
<pathelement location="${basedir}/openjpa-all-2.3.0.jar" />
</classpath>
</taskdef>
<target name="reversemap">
<reversemappingtool package="com.whatever.dbresults" directory="${basedir}/src" customizerProperties="${basedir}/conf/reverse.properties" metadata="none" generateAnnotations="true" />
</target>
</project>在我的reverse.properties文件中,我有:
ConnectionDriverName=com.mysql.jdbc.Driver
ConnectionDriverURL=jdbc:mysql://localhost:3306/db
ConnectionUser=user
ConnectionPassword=pw当我这么做的时候,我得到:
/tmp/apache-openjpa-2.3.0/build.xml:10: <openjpa-2.3.0-r422266:1540826 fatal user error> org.apache.openjpa.util.UserException: The persistence provider is attempting to use properties in the persistence.xml file to resolve the data source. A Java Database Connectivity (JDBC) driver or data source class name must be specified in the openjpa.ConnectionDriverName or javax.persistence.jdbc.driver property. The following properties are available in the configuration: "org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl@ec63420c".
at org.apache.openjpa.jdbc.schema.DataSourceFactory.newDataSource(DataSourceFactory.java:72)
at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.createConnectionFactory(JDBCConfigurationImpl.java:849)
at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getConnectionFactory(JDBCConfigurationImpl.java:732)
at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDataSource(JDBCConfigurationImpl.java:878)
at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDataSource2(JDBCConfigurationImpl.java:920)
at org.apache.openjpa.jdbc.schema.SchemaGenerator.<init>(SchemaGenerator.java:85)
at org.apache.openjpa.jdbc.meta.ReverseMappingTool.run(ReverseMappingTool.java:2009)
at org.apache.openjpa.jdbc.ant.ReverseMappingToolTask.executeOn(ReverseMappingToolTask.java:295)这可能是调试此问题的错误方法,但跟踪了在ReverseMappingToolTask.java第282行加载的属性文件,然后将其传递给
flags.customizer.setConfiguration(customProps);在打电话之前
ReverseMappingTool.run(conf, files, flags, loader);这一错误似乎发生在ReverseMappingTool的第2009行,它似乎从未触及过“旗帜”。
井。我的“调试”可能是一个无后遗症/红鲱鱼/什么你有。如何使反向映射尽可能以最简单的方式工作?我只想和蚂蚁一起用,而不是maven,等等。
编辑2014-08-13 OK,通过将build.xml更改为
<?xml version="1.0" ?>
<project name="reverser" default="reversemap" basedir=".">
<taskdef name="reversemappingtool" classname="org.apache.openjpa.jdbc.ant.ReverseMappingToolTask">
<classpath>
<pathelement location="${basedir}/mysql-connector-java-5.1.31-bin.jar" />
<pathelement location="${basedir}/openjpa-all-2.3.0.jar" />
</classpath>
</taskdef>
<target name="reversemap">
<reversemappingtool package="com.whatever.dbresults" directory="${basedir}/src" metadata="none" generateAnnotations="true">
<config
connectionDriverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/db"
connectionUserName="user"
connectionPassword="pw"
/>
</reversemappingtool>
</target>
</project>但是,现在,我明白:
<openjpa-2.3.0-r422266:1540826 fatal user error> org.apache.openjpa.util.MetaDataException: 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.谢谢!
发布于 2014-08-14 03:54:49
好吧,好吧,我终于让它起作用了。当然,我不知道这是不是“正确”的方式。但是,它生成了我的类,这就是我真正想要的。
因此,我的新构建文件如下所示:
<?xml version="1.0" ?>
<project name="reverser" default="reversemap" basedir=".">
<taskdef name="reversemappingtool" classname="org.apache.openjpa.jdbc.ant.ReverseMappingToolTask">
<classpath /> <!-- removed classpath for the sake of making this post short -->
</taskdef>
<target name="reversemap">
<reversemappingtool package="com.whatever.db" directory="${basedir}/src" metadata="none" generateAnnotations="true">
<config propertiesFile="persistence.xml" />
</reversemappingtool>
</target>
</project>而且,我的persistence.xml看起来
<?xml version="1.0"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="openjpa">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<properties>
<property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/db"/>
<property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>
<property name="openjpa.ConnectionUserName" value="user"/>
<property name="openjpa.ConnectionPassword" value="password"/>
<property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO"/>
</properties>
</persistence-unit>
</persistence>所以。我觉得这样就行了。希望如果其他人想知道如何使用ant和java完成反转地图,这将有所帮助。
https://stackoverflow.com/questions/25256691
复制相似问题