2012-03-16 21 views
1

我想第一次创建一个JAR与Ant,并遇到一些困难。这里是我的项目目录结构:无法获得jar文件结构化我想用Ant的方式

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

在我的蚂蚁buildscript,我复制我所有的源文件添加到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是导入它们为:

进口classes.com.me.org。嘶嘶声;

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

我以为有什么东西我可以在清单做的说,使他们将导入为“嘿根包classes/com/,不classes/!”:

进口com.me .org.Fizz;

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

而且,如果你好奇,为什么要打包他们classes/目录下,然后我会说的,因为我喜欢有一个包含一个JAR内一个单一的目录的想法整个类路径。尤其是如果存在非Java类路径资源(图像,脚本,文件等),则需要一个地方将软件包根(com/)和这些其他资源放在同一父目录中。

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

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

+0

我认为这是一个jar惯例,软件包必须从根开始,而不是放在某个目录下。 – oers 2012-03-16 17:23:06

+0

不要怀疑你的oers(和谢谢!),但你能指导我一些文档?在我的任何搜索中我都没有看到。 – IAmYourFaja 2012-03-16 17:25:27

+0

没有*要求* war文件根本没有/ WEB-INF/classes目录(不是/ classes);你的应用的所有类都可以放在一个罐子里。类需要精确定位到它们的包的状态(无定制类加载器)。在构建过程中发生一切Glomming发生。我不明白你认为你是通过强加一个非标准层次结构来完成的。 – 2012-03-16 19:32:45

回答

0

您是否尝试将Class-Path属性添加到清单中?我认为加上下面的工作:

Class-Path : classes/ 

如果不工作,那么你可能要打包包含在根级别的类的jar包,然后添加到您的myProj.jar。所以你首先要创建一个只有你的类myClasses.jar的jar,然后你将该jar打包到你的myProj.jar中。该清单将包括:

Class-Path : classes/myClasses.jar 

和你的罐子应该是这样的:

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

我从未试过,很抱歉,如果按预期的方式不起作用。 Here is有关Class-Path属性的更多信息。

-1

你可能希望你的蚂蚁文件集是:

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

通过仅仅有目录本身,“类”目录是什么,是把你的jar文件。通过放置包含,您将类用作基础,然后将该目录的所有内容放入jar中。

+0

我感谢您的意见,但我非常确定您没有阅读我的问题!我**想**我的JAR文件中的'classes /'目录! – IAmYourFaja 2012-03-16 17:40:16