【问题标题】:Executable jar file created from Ant does not work从 Ant 创建的可执行 jar 文件不起作用
【发布时间】:2015-01-13 13:17:53
【问题描述】:

我正在尝试使用 Ant 创建一个可执行(双击)jar。我的课程是 ChatClient 和 ChatServer,这是一个简单的多线程聊天服务器。我在阅读教程后创建了 build.xml,但这里似乎有问题。 我得到的错误是, 错误:无法找到或加载主类 C:...(jar 文件的路径)

我的项目名称是 JamesPractice,包名称是 SimpleChat。类是 SimpleChatServer 和 SimpleChatClient

<?xml version="1.0"?>
<project name = "JamesPractice" default= "jar" basedir =".">
<property name = "src.dir" location = "src" />
<property name = "build.dir" location = "c:\Build" />
<property name = "project.name" value = "JamesPractice" />
<property name="lib.dir" location="lib" />

<target name = "clean">
    <delete dir="${build.dir}" />
</target>

<target name = "makedir">
    <mkdir dir= "${build.dir}" />
    <mkdir dir= "${build.dir}\classes" />
</target>

<target name = "compile" depends = "clean, makedir">
    <javac srcdir = "${src.dir}" destdir = "${build.dir}\classes" />
</target>

<target name = "jar" depends = "compile">
    <jar destfile = "${build.dir}/jars/${ant.project.name}.jar" basedir = "${build.dir}/classes" />
    <manifest file = "MANIFEST.MF">
        <attribute name = "Main-Class" value = "SimpleChat.SimpleChatServer"/>
        <attribute name = "Class-Path" value = "."/>
    </manifest>

</target>

MANIFEST.MF
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.2
Created-By: 1.7.0_11-b21 (Oracle Corporation)
Main-Class: SimpleChat.SimpleChatClient

已编辑 我已经合并了两个类,它工作正常。但 .jar 仍然给我同样的错误.. 用 HelloWorld 进行测试,看看我是否可以让它工作......

【问题讨论】:

标签: java eclipse ant jar scripting


【解决方案1】:

将“清单”部分移到 ... 标签下:

<target name = "jar" depends = "compile">
    <jar destfile = "${build.dir}/jars/${ant.project.name}.jar" basedir = "${build.dir}/classes">
        <manifest file = "MANIFEST.MF">
            <attribute name = "Main-Class" value = "SimpleChat.SimpleChatServer"/>
            <attribute name = "Class-Path" value = "."/>
        </manifest>
    </jar>
</target>

而且最好使用 Maven 而不是老式的 Ant。 Maven 几年前成为行业标准。

【讨论】:

  • 谢谢,我将 移到 下并删除了 file = "MANIFEST.MF",因为错误显示 manifest 不支持 "file" 属性。但我仍然得到相同的“无法加载”主要错误。这可能是类路径或主类有问题吗?
  • 似乎您的构建中不需要 Class-Path 属性。尝试删除它。如果它没有帮助 - 编辑您的问题并将生成的 MANIFEST.MF 内容添加到其中。
  • 删除类路径后我仍然遇到同样的错误。我添加了删除之前生成的 MANIFEST.MF。
  • 只是为了验证:你的 jar 文件中有 /SimpleChat/SimpleChatServer.class 文件吗?
  • 是的,/SimpleChat/SimpleChatServer.class和/SimpleChat/SimpleChatClient.class都在jar文件中
猜你喜欢
  • 2010-11-15
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 2011-03-03
相关资源
最近更新 更多