【问题标题】:How to run a jar from ant which dependes on other jar file如何从依赖于另一个 jar 文件的 ant 运行 jar
【发布时间】:2012-12-28 15:20:41
【问题描述】:

我对如何创建 ant 文件非常陌生。其他类似的问题对我没有多大帮助,所以这就是我所拥有的。

我有这个 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>

在尝试从 ant 运行 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

我需要添加什么才能使其正常工作?

谢谢, 萨斯·加布里埃尔

【问题讨论】:

  • 尝试在 任务中使用属性 classpathref 而不是 classpath。
  • 我刚刚尝试了 classpathref,现在我得到了:
  • clean: compile: [javac] D:\Projects\UMS-PKS\ant\33_DeployScritps.xml:26: 警告:'includeantruntime' 未设置,默认为 build.sysclasspath=last;为可重复构建设置为 false [javac] 将 1 个源文件编译到 D:\Projects\UMS-PKS\tmp\buildMySql\classes jar:[jar] 构建 jar:D:\Projects\UMS-PKS\tmp\buildMySql\jar \CopyScriptsToDatabase.jar 运行:构建失败 D:\Projects\UMS-PKS\ant\33_DeployScritps.xml:39:未找到参考 tmp/buildMySql/jar/mysql-connector-java-commercial-5.1.21-bin.jar。 mysql jar 在那里
  • 在这里找到了我的答案:tutorial ant with classpathref

标签: java mysql eclipse ant


【解决方案1】:
  1. 根据你的ant文件所在目录,你的目录../ant/src中是否有mysql-connector-java-commercial-5.1.21-bin.jar文件?
  2. 如果您在 ../ant/src/ 中有该文件,请使用 zip 工具打开它并确保 Driver.class 在 com/mysql/jdbc/ 中。 而且我认为最好将其命名为 lib,您可以在其中放置 3rd 方 lib 文件。

【讨论】:

  • 是的,我在 ant/src 和 tmp/buildmysql/jar 中有一个 mysql-connector-java-commercial-5.1.21-bin.jar
【解决方案2】:

我最近遇到了同样的问题。经过一番调查,我找到了解决方案。我会为下一个正在寻找此解决方案的人写下来。

替换此部分:

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

到这里:

<path id="classref1" location="${jar.dir}/CopyScriptsToDatabase.jar"/>
<path id="classref2" location="path/to/jars/mysql-connector-java-commercial-5.1.21-bin.jar"/>
<target name="run" depends="jar">
    <java fork="true classname="lib.classpath">
        <classpath>
            <path refid="classref1"/>
            <path refid="classref2"/>
        </classpath>
        <arg value="${dwh.serverName}"/>
    </java>
</target>

这就像跑步:

java -cp "mysql-connector-java-commercial-5.1.21-bin.jar:CopyScriptsToDatabase.jar" {lib.classpath} {arg_serverName}

【讨论】:

    猜你喜欢
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多