2

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>
4

2 に答える 2

6

マニフェスト ファイルで、属性がメソッドMain-Classを含むクラスの名前に設定されていることを確認しますmain()。たとえば、クラスのパッケージ修飾名が の場合、my.cool.ClassJAR マニフェストでMain-Classを に設定する必要がありますmy.cool.Class

また、ファイルにパッケージ宣言があることも確認してください.java(たとえば、 ではClass.java、適切なpackage my.cool;宣言があることを確認してください)。また、ディレクトリ階層が正しく設定されていることを確認してください (my.cool.Classにある必要があります$SRC/my/cool/Class.java)。

于 2008-11-21T15:09:28.097 に答える
4

次のように、フル パスを使用して 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>
于 2008-11-21T15:13:13.923 に答える