2013-01-14 50 views
2

我對如何創建ant文件非常新穎。其他類似的問題對我沒有太大的幫助,所以這裏是我的。如何從依賴於其他jar文件的螞蟻運行jar

我有這個Ant文件:

<?xml version="1.0" encoding="UTF-8"?> 
    <project name="UMS-PKS 33 Deploy Scripts for Snapshot" default="main" basedir=".."> 

     <property name="src.dir"  value="setup/CopyScriptsToDatabase"/> 
     <property name="ant.dir"  value="ant/src"/> 
     <property name="build.dir" value="tmp/buildMySql"/> 
     <property name="classes.dir" value="${build.dir}/classes"/> 
     <property name="jar.dir"  value="${build.dir}/jar"/> 
     <property name="main-class" value="CopyScriptsToDatabase.test"/> 
     <property file="ant/properties/compile.properties" /> 
     <property file="ant/properties/profile.properties" /> 
     <property file="ant/properties/${deploy.properties}" /> 

     <path id="lib.classpath"> 
      <fileset dir="${ant.dir}"> 
       <include name="mysql-connector-java-commercial-5.1.21-bin.jar" /> 
      </fileset> 
     </path> 

     <target name="clean"> 

     </target> 

     <target name="compile"> 
      <mkdir dir="${classes.dir}"/> 
      <javac srcdir="${src.dir}" destdir="${classes.dir}"/> 
     </target> 

     <target name="jar" depends="compile"> 
      <mkdir dir="${jar.dir}"/> 
      <jar destfile="${jar.dir}/CopyScriptsToDatabase.jar" basedir="${classes.dir}"> 
       <manifest> 
        <attribute name="Main-Class" value="${main-class}" /> 
       </manifest> 
      </jar> 
     </target> 

     <target name="run" depends="jar"> 
      <java jar="${jar.dir}/CopyScriptsToDatabase.jar" fork="true" classpath="lib.classpath"> 
       <arg value="${dwh.serverName}"/> 
      </java> 
     </target> 

     <target name="clean-build" depends="clean,jar"/> 
     <target name="main" depends="clean,run"/> 
    </project> 

我在嘗試運行從螞蟻的jar文件時出現以下錯誤:

 Buildfile: D:\Projects\UMS-PKS\ant\33_DeployScritps.xml 
    clean: 
    compile: 
     [javac] D:\Projects\UMS-PKS\ant\33_DeployScritps.xml:26: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds 
     [javac] Compiling 1 source file to D:\Projects\UMS-PKS\tmp\buildMySql\classes 
    jar: 
      [jar] Building jar: D:\Projects\UMS-PKS\tmp\buildMySql\jar\CopyScriptsToDatabase.jar 
    run: 
     [java] java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 
     [java]  at java.net.URLClassLoader$1.run(Unknown Source) 
     [java]  at java.security.AccessController.doPrivileged(Native Method) 
     [java]  at java.net.URLClassLoader.findClass(Unknown Source) 
     [java]  at java.lang.ClassLoader.loadClass(Unknown Source) 
     [java]  at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     [java]  at java.lang.ClassLoader.loadClass(Unknown Source) 
     [java]  at java.lang.Class.forName0(Native Method) 
     [java]  at java.lang.Class.forName(Unknown Source) 
     [java]  at CopyScriptsToDatabase.test.main(Unknown Source) 
     [java] localhost 
     [java] MySQL Connect Example. 
    main: 
    BUILD SUCCESSFUL 
    Total time: 1 second 

什麼我需要爲此增加工作?

感謝, SAS加布裏埃爾

+1

嘗試在任務中使用屬性classpathref而不是classpath。 – Robert

+0

可能重複的[在用Ant編譯的文件中找不到主要類](http://stackoverflow.com/questions/3143567/cannot-find-main-class-in-file-compiled-with-ant) –

+0

我剛試過classpathref,現在我得到: –

回答

0
  1. 根據你的Ant文件所在的目錄,你有一個MySQL連接器,Java的商業5.1.21-bin.jar解壓在direcotry ../螞蟻/ src目錄?
  2. 如果您在./ant/src/中有該文件,請使用zip工具將其打開並確保Driver.class位於com/mysql/jdbc /目錄中。 我認爲最好把它命名爲lib,放置第三方lib文件。
+0

是的,我有一個mysql-connector-java-commercial-5.1.21-bin .jar在ant/src和tmp/buildmysql/jar中 –