首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JAR清单文件中指定类路径加载顺序

如何在JAR清单文件中指定类路径加载顺序
EN

Stack Overflow用户
提问于 2015-01-08 13:53:44
回答 2查看 4.7K关注 0票数 2

我正在使用Ant创建一个JAR文件,但我需要为Manifiest文件中生成的JAR文件指定类路径加载顺序。

之所以出现这种情况,是因为我所使用的一些依赖项使用了另一个库的不同版本,而且我需要确保加载了最新版本的库。使用Eclipse接口很容易,但我不知道如何使用Ant来实现这一点。

这就是我现在为JAR任务准备的内容:

代码语言:javascript
复制
<target depends="build-project" name="jar">
            <!-- Get the timestamp -->  
            <set.timestamp/>
            <!-- Create our own manifest file for our JAR -->
            <manifest file="MANIFEST.MF">
                <attribute name="Built-By" value="${username} - ${company.name}"/>
                <attribute name="Main-Class" value="some.package.Main"/>
                <attribute name="Class-path" value=". ${lib.list}"/> 
                <attribute name="Implementation-Version" 
                    value="${major.version.number}.${minor.version.number}.${revision.number}"/>   
                <attribute name="Built-Date" value="${current.time}"/>                 
            </manifest>

            <jar whenmanifestonly="fail" destfile="${dist.dir}/${jar.name}_${major.version.number}.${minor.version.number}.${revision.number}.jar" manifest="MANIFEST.MF">
</target>

现在这是Classpath属性:

代码语言:javascript
复制
<manifestclasspath property="lib.list" jarfile="${dist.dir}/${jar.name}_${major.version.number}.${minor.version.number}.${revision.number}.jar">
   <classpath refid="manifest.classpath" />
</manifestclasspath>

这是manifest.classpath:

代码语言:javascript
复制
<!-- Manifest classpaht -->
<path id="manifest.classpath">
    <fileset dir="${dist.dir}/lib">
          <include name="*.jar"/>
      </fileset>
</path>

在我看来,这看起来像是我必须手动定义上面的每个库,而不是使用一个wildcard...but,这样的顺序会在之后完成吗?

谢谢!亚历杭德罗

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-08 14:53:55

定义类路径时,可以在该路径中复制jars,就像在$PATH中复制目录一样。这很草率,但也不错:

代码语言:javascript
复制
PATH="/bin:/usr/bin:$HOME/bin:/usr/local/bin:/bin"

/bin目录被指定了两次,但这并不重要。如果我指定了ls/bin在我的$PATH中的第一个实例就会找到它。/bin在我的$PATH中的最后一个实例什么也不做。没有对重复造成真正的伤害。

如果您需要指定特定jars必须首先使用的类路径,那么首先指定您需要的是什么。如果$PATH再次包含特定的jar名称,那么这并不重要:

代码语言:javascript
复制
 <path id="manifest.classpath">
     <pathelement location="${first.jar}"/>
     <pathelement location="${second.jar}"/>
     <fileset dir="${manifest.jars.dir}"/>
</path>

即使${first.jar}${second.jar}在那个${manifest.jars.dir}中,也不重要。它们仍然会在你的道路上先被捡起来,然后在你的道路上被忽略。

现在,你可以这样做:

代码语言:javascript
复制
<manifestclasspath property="manifest.path">
    <pathelement location="."/>
    <classpath refid="manifest.classpath"/>
</manifestclasspath>

最后:

代码语言:javascript
复制
<jar destdir="....">
    <manifest>
        <attribute name="Class-path" value="${manifest.path}"/>
        ...
    </manifest>
</jar>
票数 2
EN

Stack Overflow用户

发布于 2015-01-08 14:18:51

据我所知,清单中的类路径将与按您提供的顺序排序的条目一起定义。我知道它在Maven中是这样工作的,而且在Ant中也是如此,所以您可以做的是先提供“关键”条目,然后放入通配符,从而提供所需的顺序,而不是手动定义所有所需的依赖项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27841756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档