我正在使用Ant来构建和运行我的简单java程序,但是我的文件层次结构应该如何布局,以便程序可以访问和修改sqlite db文件。
我听说我不能在jar中包含db文件,因为这会导致它变为只读。我唯一的另一个猜测是把它放在相对于jar文件的某个地方(最好是同一个目录?)但是我不知道该怎样做我的ant build.xml文件以反映当我执行'ant run'时,也不是我确定这如何修改jdbc连接字符串。
我当前的jdbc连接代码:
logger.debug("Setting up database connection");
Class.forName("org.sqlite.JDBC");
dbConnection = DriverManager.getConnection("jdbc:sqlite:images.db");
我的ant build.xml
<project name="Maower" basedir="." default="main">
<property name="src.dir" value="src"/>
<property name="build.dir" value="build"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="jar.dir" value="${build.dir}/jar"/>
<property name="lib.dir" value="lib"/>
<property name="log.dir" value="log"/>
<property name="main-class" value="good.maower.Maower"/>
<path id="classpath">
<fileset dir="${lib.dir}" includes="**/*.jar"/>
<fileset dir="${src.dir}" includes="**/*.properties"/>
</path>
<target name="clean">
<delete dir="${build.dir}"/>
</target>
<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath" includeantruntime="false"/>
<copy todir="${classes.dir}" overwrite="true">
<fileset dir="${src.dir}" includes="**/*.properties"/>
</copy>
</target>
<target name="jar" depends="compile">
<mkdir dir="${jar.dir}"/>
<jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="${main-class}"/>
</manifest>
</jar>
</target>
<target name="run" depends="jar, input-runargs">
<java fork="true" classname="${main-class}">
<classpath>
<path refid="classpath"/>
<path location="${jar.dir}/${ant.project.name}.jar"/>
</classpath>
<arg line="${args}"/>
</java>
</target>
<target name="input-runargs" unless="args" description="Ensures that subscriber email addresses are specified in command line arguments">
<input addProperty="args" message="List subscribers: "/>
</target>
<target name="clean-build" depends="clean,jar"/>
<target name="main" depends="clean,jar"/>
</project>