自己编写了个java测试类,其中引用了hibernate框架
用ANT写了编译和运行的任务<?xml version="1.0"?>
<project basedir="." default="test" name="testproject">
<property name="lib.dir" value="lib" />
<path id="classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</path>
<target name="bot">
<javac destdir="${basedir}/Model">
<src path="${basedir}" />
<classpath refid="classpath" />
</javac>
</target>
<target name="exc">
<java classname="NewsManager">
<classpath>
<pathelement path="${basedir}/Model" />
</classpath>
</java>
</target>
</project>运行exc任务的时候是否应增加下面的引用?先谢过了
<classpath refid="classpath" />
用ANT写了编译和运行的任务<?xml version="1.0"?>
<project basedir="." default="test" name="testproject">
<property name="lib.dir" value="lib" />
<path id="classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</path>
<target name="bot">
<javac destdir="${basedir}/Model">
<src path="${basedir}" />
<classpath refid="classpath" />
</javac>
</target>
<target name="exc">
<java classname="NewsManager">
<classpath>
<pathelement path="${basedir}/Model" />
</classpath>
</java>
</target>
</project>运行exc任务的时候是否应增加下面的引用?先谢过了
<classpath refid="classpath" />
编译的时候依赖的Jar包,并不会通过编译进入字节码,运行时依然需要带上。<java classpathref="classpath"
...
以下是报错结果,看了下好像需要资源文件Model/News.hbm.xml 不是很明白
exc:
[java] org.hibernate.MappingNotFoundException: resource: Model/News.hbm.xml not found
[java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:194)
[java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:771)
[java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:221)
[java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:135)
[java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:108)
[java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[java] at java.lang.reflect.Method.invoke(Method.java:597)
[java] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[java] at org.apache.tools.ant.Task.perform(Task.java:348)
[java] at org.apache.tools.ant.Target.execute(Target.java:390)
[java] at org.apache.tools.ant.Target.performTasks(Target.java:411)
[java] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1397)
[java] at org.apache.tools.ant.Project.executeTarget(Project.java:1366)
[java] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
[java] at org.apache.tools.ant.Project.executeTargets(Project.java:1249)
[java] at org.apache.tools.ant.Main.runBuild(Main.java:801)
[java] at org.apache.tools.ant.Main.startAnt(Main.java:218)
[java] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
[java] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
[java] Caused by: org.hibernate.MappingNotFoundException: resource: Model/News.hbm.xml not found
[java] at org.hibernate.cfg.Configuration.addResource(Configuration.java:743)
[java] at org.hibernate.cfg.Configuration.addClass(Configuration.java:788)
[java] at NewsManager.main(Unknown Source)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[java] at java.lang.reflect.Method.invoke(Method.java:597)
[java] at org.apache.tools.ant.taskdefs.ExecuteJava.run(ExecuteJava.java:217)
[java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:152)
[java] ... 21 more
[java] Java Result: -1BUILD SUCCESSFUL
Total time: 1 second
package Model;
public class News
{
private Integer id;
private String title;
private String content; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public String getContent() {
return content;
} public void setContent(String content) {
this.content = content;
}
}//NewsManager.java
import org.hibernate.cfg.Configuration;
import org.hibernate.SessionFactory;
import org.hibernate.Session;
import org.hibernate.Transaction;
import Model.News;
public class NewsManager
{
public static void main(String[] args) throws Exception
{
Configuration conf = new Configuration().addClass(Model.News.class)
.setProperty("hibernate.connection.driver_class","com.mysql.jdbc.Driver")
.setProperty("hibernate.connection.url","jdbc:mysql//localhost/hibernate")
.setProperty("hibernate.connection.username","root")
.setProperty("hibernate.connection.password","admin")
.setProperty("hibernate.c3p0.max_size","20")
.setProperty("hibernate.c3p0.min_size","1")
.setProperty("hibernate.c3p0.timeout","5000")
.setProperty("hibernate.c3p0.max_statements","100")
.setProperty("hibernate.c3p0.idle_test_period","3000")
.setProperty("hibernate.c3p0.acquire_increment","2")
.setProperty("hibernate.c3p0.validate","true")
.setProperty("hibernate.dialect","org.hibernate.dialect.MySQLInnoDBDialect")
.setProperty("hibernate.hbm2ddl.auto","create");
SessionFactory sf = conf.buildSessionFactory();
Session sess = sf.openSession();
Transaction tx = sess.beginTransaction();
News n = new News();
n.setTitle("测试标题");
n.setContent("内容");
sess.save(n);
tx.commit();
sess.close();
}
}
以下任务需要和javac一起做:
<copy todir="${basedir}/Model">
<fileset dir="${basedir}">
<include name="**/*.properties" />
<include name="**/*.xml" />
</fileset>
</copy>
对了,顺便说一句,把classes目录指定为${basedir}/Model不好,最好换个${basedir}以外的目录。
首先感谢你耐心的替我解答!
我这个实例并没有用*.properties 或 *.hbm.xml之类的配置文件进行配置hibernate,所以就不需要进行copy。实例就两个文件:News.java 和 NewsManager.java,其中NewsManager.java文件用代码进行hibernate的配置,虽然这种做法书上有写是不推荐的,但我就想知道是错在哪里