与蚂蚁不和

  • 本文关键字:蚂蚁 java ant
  • 更新时间 :
  • 英文 :


我的项目有许多依赖关系,我从其他项目引用。我现在正在编写build.xml文件,目前正在编写JAR任务。我想我将从大胆的假设开始:如果我希望我的JAR在Eclipse之外能够正确地工作,我将需要在JAR文件的某个位置包含每个引用的JAR依赖项的副本。

所以我现在需要在jar任务下添加一个fileset,以指示Ant在JAR中包含这些依赖项。问题是,当我切换到Navigator View并试图在我的项目中找到我的依赖项时,我找不到它们!对它们的唯一引用是在一个.classpath文件中,该文件引用了它们的绝对url,我认为Eclipse就是这样找到它们的。

所以我的问题是,我如何指示Ant在这个.classpath文件中查找依赖项并将它们包含在我的JAR中?

我担心的是,我必须首先手动将每个JAR复制到项目根目录下的目录中,然后在构建中简单地引用该目录。但是有很多的jar文件,这意味着很多时间会被copy-n-pastin所浪费。

请不要建议Ivy或Maven,我很清楚这些是我的情况的最佳解决方案,但由于这个问题范围之外的原因,它们是不可行的。

谢谢你的帮助

您希望您的项目生成一个可执行的jar文件,还是将它作为提取并运行的可分发包的一部分?如果它不是你需要的可执行jar,那么你应该创建一个只包含项目中的类和资源的jar,而不包含任何依赖的jar。然后,如果你想将你的项目作为一个可分发包发布,你可能会创建一个zip和tar.gz,其中包括依赖项。

据我所知,没有办法在Ant和Eclipse .classpath文件之间自动同步文件集。除了编写自己的工具,我以前见过这样做。因此,手工复制jar文件可能是最快的解决方案。

您可以将项目从Eclipse导出为Ant构建文件(右键单击项目,单击export,选择Ant build file)。导出的build.xml文件将包含一个名为<your project name>.classpathpath元素。path元素将包含构建应用程序所需的所有jar的路径。既然您想使用fileset,那么您可以修改生成的build.xml以重用该path

让Ant使用Eclipse的类路径的唯一方法是编写Ant,以便它解析.classpath文件。

作为旁注,我不建议尝试把罐子放在罐子里。Java不能在jar中加载来自jar的类(除非您编写自己的类加载器来实现这一点)。如果绝对需要,您可以使用zipfileset。但是,正确的解决方案是在分发应用程序时将第三方jar捆绑在应用程序的jar文件之外。然后在MANIFEST中设置classpath属性。MF文件引用文件的路径(您可以重用上面的<your project name>.classpath用于MANIFEST.MF.

)。

您可以声明依赖的jar路径标记,然后将其用作类路径的引用。例如,

<project basedir="." default="build.all" name="My Application">
<path id="myclasspath">
        <pathelement location="${project.syslib}/log4j-1.2.8.jar"/>
        <pathelement location="${project.syslib}/xalan.jar"/>
        <pathelement location="${project.syslib}/common.jar" />
        <fileset dir="${config.common}/taglib">
            <include name="**/*.jar"/>
          </fileset>
        <fileset dir="${config.csr}/taglib">
            <include name="**/*.jar"/>
          </fileset>
</path>
<target name="compile" depends="prepare" >
    <javac srcdir="${project.root}/src"
        destdir="${project.root.build}"
        classpathref="myclasspath"
        nowarn="yes"
        debug="on"
        fork="yes"
        memoryInitialSize="80m"
        memoryMaximumSize="256m"
    />
</target>
</project>  

同样,在Eclipse中,如果您通过add jars按钮添加jar,那么它将使用相对路径。

我认为如果你有这么多依赖项,复制粘贴是最小的问题。主要的问题是,在开发过程中你不再是模块化和灵活的。尽量减少它们,只保留真正必要的依赖项。为此,您可以使用Jdepend或metrics,或者两者都有Eclipse插件(或类依赖分析器)。

剩下的依赖项可以放在一个jar中(即所有类文件,而不是嵌套的jar),这可能对某些人来说很舒服,或者可以放在每个单独的外部文件中,这对于用户可能已经拥有的第三方库来说更常见,也特别有用。

我的观点是:模块化是好的,无论是开发还是部署。

相关内容

  • 没有找到相关文章

最新更新