【问题标题】:Problem running a Jar file运行 Jar 文件时出现问题
【发布时间】:2010-09-23 11:15:12
【问题描述】:

我已经将一个 java 项目编译成一个 Jar 文件,但在运行它时遇到了问题。

当我跑步时:

java -jar myJar.jar

我收到以下错误

Could not find the main class: myClass

类文件不在 jar 的根目录中,所以我尝试更改主类的路径以匹配类文件的路径,但我遇到了同样的问题。

我应该扁平化文件结构吗?如果是这样,我该怎么做。如果有任何用途,我正在使用 Ant 构建 Jar 文件。

更新

这是 jar 和相关 Ant 部分的内容,我已将我工作的公司的名称更改为“org”:

META-INF/
META-INF/MANIFEST.MF
dataAccessLayer/
dataAccessLayer/databaseTest.class
org/
org/eventService/
org/eventService/DatabaseObject.class
org/eventService/DatabaseObjectFactory.class
org/eventService/DbEventClientImpl$HearBeatMonitor.class
org/eventService/DbEventClientImpl.class
org/eventService/EmptyQueryListException.class
org/eventService/EventHandlerWorkItem.class
org/eventService/EventProcessor.class
org/eventService/EventTypeEnum.class
org/eventService/EventWorkQueue$MonitorThread.class
org/eventService/EventWorkQueue$PoolWorker.class
org/eventService/EventWorkQueue.class
org/eventService/FailedToLoadDriverException.class
org/eventService/IConnectionFailureListener.class
org/eventService/InvalidEventTypeException.class
org/eventService/JdbcInterfaceConnection.class
org/eventService/NullArgumentException.class
org/eventService/OracleDatabaseObject.class
org/eventService/ProactiveClientEventLogger.class
org/eventService/ProactiveClientEventLoggerException.class
org/eventService/PropertyMap.class
org/eventService/SQLServerDatabaseObject.class
org/eventService/TestHarness.class
org/eventService/Utilities.class

还有蚂蚁目标:

<target name="compile" depends="init" description="compile the source ">
    <javac srcdir="src" destdir="bin" classpathref="project.class.path"/>
</target>
<target name="buildjar" description="build jar file" depends="compile">
    <mkdir dir="dist"/>
    <jar destfile="dist/myJar.jar" basedir="bin" includes="**/*.class" >
        <manifest>
            <attribute name="Main-Class" value="org.eventService.ProactiveClientEventLogger"/>
        </manifest>
     </jar>
</target>

【问题讨论】:

  • 向我们展示清单的内容。如果不是太大,请向我们展示 jar 文件的列表。
  • 向我们展示清单的内容,而不仅仅是创建它的 ant 任务。
  • 您的 MANIFEST.MF 文件中有什么内容? org.eventService.ProactiveClientEventLogger 有 main() 方法吗?

标签: java ant jar mainclass


【解决方案1】:

在您的清单文件中,确保将属性 Main-Class 设置为包含您的 main() 方法的类的名称。例如,如果类的包限定名称是 my.cool.Class,那么在您的 JAR 清单中,Main-Class 应设置为 my.cool.Class。

还要确保您的 .java 文件中有包声明(例如,在 Class.java 中,请确保您有正确的 package my.cool; 声明)。另外,请确保您的目录层次结构设置正确(my.cool.Class 应该在$SRC/my/cool/Class.java 中)。

【讨论】:

  • 我已经完成了所有这些......但它仍然无法正常工作......虽然我使用斜线而不是圆点来区分它们。它也不适用于点...
  • manifest 文件对大小写、空格等非常挑剔。如果 Main-Class 行是最后一行,请确保您的行也正确终止。
【解决方案2】:

您应该在创建 jar 时使用完整路径指定您的主类,例如:

<target name="jar" depends="compile">
     <delete file="myJar.jar"/>
     <delete file="MANIFEST.MF"/>
     <manifest file="MANIFEST.MF">
        <attribute name="Main-Class" value="my.package.myClass"/>
    </manifest>

    <jar destfile="myJar.jar"
           basedir="."
           includes="**/*.class"
           manifest="MANIFEST.MF" />
</target>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多