如何在我的 Ant 构建中包含外部 jar 库

2022-09-04 05:20:15

我有以下几点:build.xml

<project>

<target name="clean">
    <delete dir="./build"/>
</target>

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

<target name="jar">
    <mkdir dir="./build/jar"/>
    <jar destfile="./build/jar/DependencyFinder.jar" basedir="./build/classes">
        <manifest>
            <attribute name="DependencyFinder" value="main"/>
        </manifest>
    </jar>
</target>

<target name="run">
    <java jar="./build/jar/DependencyFinder.jar" classname="${main-class}" fork="true"/>                    
</target>

</project>

这是我的目录结构:

/build /lib /MagicFolder /Src /build.xml

文件夹包含文件。src.java

路径 应为输入参数。MagicFolder

lib有外部.jar库,应该包含在我的构建中。

build将编译.class'文件的文件夹.jar and

问:我应该如何更改我的?我应该:build.xmlbuild.xml

  1. 添加外部库./lib/jbl.jar
  2. 当我运行我的应用程序时,为我的应用程序放置2个输入参数

答案 1

如果您需要将jar添加到classpath以编译代码(抱歉,不太清楚您要求什么),那么您需要将任务更改为如下所示:<javac>

<javac srcdir="./src" destdir="./build/classes">   
    <classpath>
        <pathelement path="lib/jbl.jar"/>
    </classpath>
</javac>

或者,如果您需要将 的内容添加到您正在创建的jar中,则需要将任务更改为如下所示:jbl.jar<jar>

<jar destfile="./build/jar/DependencyFinder.jar" basedir="./build/classes>
    <zipgroupfileset dir="lib" includes="jbl.jar" />
    <manifest>
        <attribute name="DependencyFinder" value="main"/>
        <attribute name="Main-Class" value="org.ivanovpavel.YourMainClass"/>
    </manifest>
</jar>

要添加要调用的参数,请使用嵌套元素:<java><arg>

<target name="run">
    <java jar="./build/jar/DependencyFinder.jar:lib/jbl.jar" classname="dependencyfinder.DependencyFinder">  
        <arg value="Alexander Rosenbaum"/>
        <arg value="Dmitry Malikov"/>
    </java>                  
</target>

答案 2

有两种方法可以运行java程序。使用“jar”选项是最方便的,称为可执行jar,但是为了使其工作,您需要在清单文件中指定Main类和类路径,如下所示:

<jar destfile="${jar.file}" basedir="${classes.dir}">
    <manifest>
        <attribute name="Main-Class" value="${jar.main.class}" />
        <attribute name="Class-Path" value="${jar.classpath}" />
    </manifest>
</jar>

有关如何执行此操作的更详细答案,请参阅:

在一致的环境中执行 Java 程序


推荐