繁体   English   中英

无法用Ant以我想要的方式构造jar文件

[英]Can't get jar file structured the way I want with Ant

我试图第一次用Ant创建JAR,但遇到了一些困难。 这是我的项目目录结构:

MyProj/
    src/
        com.me.org
            Fizz
            Buzz
    dist/
        classes/

在我的Ant构建脚本中,我将所有源文件复制到dist/classes/文件夹中。 然后,将dist/classes作为文件集包含在我的JAR任务中,如下所示:

<jar destfile="dist/myProj.jar">
    <manifest>
        <attribute name="Sealed" value="true" />
    </manifest>

    <fileset dir="dist/classes"/>
</jar>

JAR任务执行并生成一个JAR。 但是,当我将该JAR放在另一个项目(Eclipse)的构建路径上并尝试在另一个项目中使用FizzBuzz ,Eclipse会将它们导入为:

import classes.com.me.org.Fizz;

等等,这是因为Eclipse必须认为我的classes/目录是一个包!

我认为清单中可以做些什么,说“ 嘿!根包是classes/com/ ,不是classes/ ”,这样它们将被导入为:

进口com.me.org.Fizz;

我阅读了Ant <manifest>任务,但找不到我想要的东西。 有人对我在这里可以做什么有任何想法吗?

而且,如果您对为什么要将它们打包在classes/目录下感到好奇,那么我会说它是因为我喜欢在包含整个类路径的JAR中使用一个目录的想法 而且,尤其是如果有非Java类路径资源(图像,脚本,文件等),则需要一个地方将包的根目录( com/ )和其他资源都放在同一父目录中。

最初,我打算将这个目录称为classpath/ ,但是后来我决定使用与WAR文件规范相同的约定,这需要WAR内有一个classes/目录。

这就是为什么。 ;-) 提前致谢!

您是否尝试过将Class-Path属性添加到清单中? 我认为添加以下内容将起作用:

Class-Path : classes/

如果这不起作用,那么您可能必须打包一个在根级别包含类的jar,然后将其添加到myProj.jar。 因此,您将首先仅使用类myClasses.jar创建一个jar,然后将其打包到myProj.jar中。 清单将包含:

Class-Path : classes/myClasses.jar

您的罐子看起来像这样:

myProj.jar
  - META-INF/MANIFEST.MF
  - classes/myClasses.jar

我从来没有实际尝试过,如果不能按预期工作,请对不起。 这是有关Class-Path属性的更多信息。

您可能希望您的ant文件集为:

<fileset dir="dist/classes" includes="**/*" />

通过仅拥有目录本身,“ classes”目录即被放入您的jar文件中。 通过放置include,您将使用类作为基础,然后它将获取该目录的所有内容并将其放入jar中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM