[英]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)的构建路径上并尝试在另一个项目中使用Fizz
或Buzz
,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.