Dav*_*veM 6 java eclipse ant manifest.mf
这是一个非常愚蠢的问题,我无法回答这个问题.
背景.
我正在使用Eclipse(带有一个ANT插件,在XP终端上).
我刚刚开始玩ANT,在[jar]指令中我正在设置完成的JAR文件的位置,当我'解压缩'文件时,我得到以下内容
META-INF/MANIFEST.MF MyMainFile.class
这与oracle网站上的内部结构一致.(这里http://docs.oracle.com/javase/tutorial/deployment/jar/view.html)
但是当我尝试运行我的文件时,我得到一个'主要类未找到'错误?
我看过其他一些帖子,其中人们已经"解压缩"了JAR文件并最终得到了以下结构......
META-INF/MANIFEST.MF dtvcontrol/DTVControlApp.class
(从这里http://www.coderanch.com/t/528312/java/java/standalone-application)
所以我应该得到一个结构,其中我的类文件位于反映包名称的目录中...例如
META-INF/MANIFEST.MF MyPackage/MyMainFile.class
如果是这样,为什么我使用ANT得到错误的结构,或者为什么有2个不同的"正确"内部结构?(如何为每个/控制我得到的东西指定main-class和classpath)
如果你感兴趣,在MANIFEST文件中声明(使用ANT构建)[attribute name ="Main-Class"value ="MyPackage.MyMainFile"/]
正在开发的包的目录结构如下......
/ JavaDev/MyTestPackage/src(包含源文件)// JavaDev/MyTestPackage/bin(包含来自eclipse的类文件,或来自ANT JAVAC任务,我是否将其命名为错误?我应该将其命名为build吗?)
除此之外,当我创建jar时,我没有将其命名为'MyTestPackage.jar',但只是'test.jar'可能导致问题?我并不认为我已经很好地理解了[main-class]定义的东西是什么.
除此之外......
'MyTestPackage'实际上是我在别处使用的一个小的可视化错误消息库,我有一个第二个文件,它有一个用于测试的主类.因此它指向各种库(我需要将所有SWT库复制到指定的目录吗?)
我已经阅读过某个地方,如果我将库加载到我的主类(我显然是打开窗口),那么如果我使用它们,尝试运行程序将失败'未找到主类',添加也是如此在任何'静态最终'成员(我用于错误的登录).
"静态最终"问题......我试图在ANT中调整类路径,并且我为Log4J和我使用的"包装器"连接带来了一些其他错误(这与它的导入很差),但是库存在应该在类路径中设置的位置).
我觉得我差不多......但不完全......
我正在为我正在创建的小型"图书馆项目"这样做,目的是将MAVAN用于主要的外部包,将它们连接在一起......但是现在我只是希望这样做,因为它的工作原理.
我可以根据需要提供完整的来源或任何其他信息.
提前致谢...
大卫
当你知道在哪里看时,它很简单.假设您的META-INF/MANIFEST.MF包含以下行:
Main-Class: mypackage.MyMainFile
Run Code Online (Sandbox Code Playgroud)
然后jar的结构需要
META-INF/MANIFEST.MF
mypackage/MyMainFile.class
Run Code Online (Sandbox Code Playgroud)
MyMainFile必须在适当的包中:
package mypackage;
public class MyMainFile {
public static void main(String[] args) {
...
Run Code Online (Sandbox Code Playgroud)
您的错误消息是由MyMainFile在错误的位置引起的.
编辑:自从我最后一次使用ant以来已经有一段时间了,但我认为你需要这样的东西:反映包装结构的源文件结构,比如说
src/main/java/mypackage/MyMainFile.java
Run Code Online (Sandbox Code Playgroud)
以及将编译后的类文件放入的目录
target
Run Code Online (Sandbox Code Playgroud)
(我在这里使用maven约定,ant并不关心你可以使用eclipse中的(右键单击) - > properties-> Java Build path-> Sources选项卡将源目录设置为src/main/java和目标目标/类).然后在ant中,有一个从源到目标编译的编译目标:
<target name="compile">
<mkdir dir="target/classes"/>
<javac srcdir="src/main/java" destdir="target/classes"/>
</target>
Run Code Online (Sandbox Code Playgroud)
这样ant compile
你应该在目标中看到类文件
target/classes/mypackage/MyMainFile.class
Run Code Online (Sandbox Code Playgroud)
然后有一个ant jar任务打包这个:
<target name="jar" depends="compile">
<jar destfile="target/MyJarFile.jar" basedir="target/classes">
<manifest>
<attribute name="Main-Class" value="mypackage.MyMainFile"/>
</manifest>
</jar>
</target>
Run Code Online (Sandbox Code Playgroud)
在说ant compile jar
你应该在目标内部有一个文件MyJarFile.jar之后
java -jar MyJarFile.jar
Run Code Online (Sandbox Code Playgroud)
应该运行main方法.
归档时间: |
|
查看次数: |
14472 次 |
最近记录: |