欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

用Ant打Jar包--在Manifest中引用Classpath

程序员文章站 2022-05-23 09:06:35
...

 

在打jar包时,往往需要在manifest文件中设置Class-Path,包含一些依赖的第三方jar包,使得以“java -jar xxx.jar”方式启动的jar包能正确找到依赖的类

网上大多演示使用打jar包的例子都是像这样的:

<target name="jar" >

        <jar destfile="${dest.jar}">

            <fileset dir="${source.class}">

                <include name="**/*.class"/>

            </fileset>

            <manifest>

                <attribute name="Main-Class" value="${mianclass}"/>

                <attribute name="Class-Path" value="xxxx.jar xxxx.jar xxxx.jar xxxx.jar"/>

            </manifest>

        </jar>

在依赖的jar包比较多的情况下,手工设置所有的jar包是非常令人崩溃而且容易出错的事情。一旦引用的外部jar包有变动,还需要到这里维护,时间一长,可能就会忘记。

经过一番查找,发现了一种配置

<path id="classpath">

        <fileset  dir="${lib}" include="**/*.jar"/>

 </path>

<target name="jar" depends="compile">

         <pathconvert property="mf.classpath" pathsep=" ">

             <path refid="classpath" />

             <mapper>
                    <chainedmapper>
                        <!-- 移除绝对路径 -->
                        <flattenmapper />
                        <!-- 加上lib前缀 -->
                        <globmapper from="*" to="lib/*" />
                    </chainedmapper>
                </mapper>

         </pathconvert>

        <jar destfile="${dest.jar}">

            <fileset dir="${source.class}">

                <include name="**/*.class"/>

            </fileset>

            <manifest>

                <attribute name="Main-Class" value="${mainclass}"/>

                <attribute name="Class-Path" value="${mf.classpath} "/>

            </manifest>

        </jar>

 可以把classpath中的jar包,转换成jar Class-Path格式