Problema al ejecutar un archivo Jar

votos
2

He compilado un proyecto de Java en un archivo Jar y tengo problemas para ejecutarlo.

Cuando corro:

java -jar myJar.jar

Obtuve el siguiente error

Could not find the main class: myClass

El archivo de clase no está en el directorio raíz del contenedor, así que he intentado cambiar la ruta de acceso de la clase principal para que coincida con la ruta al archivo de clase y recibo el mismo problema.

¿Debería aplanar la estructura del archivo? si es así, ¿cómo hago esto? Estoy usando Ant para construir el archivo Jar si eso es de alguna utilidad.

ACTUALIZAR

Aquí está el contenido del contenedor y las secciones relevantes de Ant, he cambiado el nombre de la empresa para la que trabajo a 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

Y el objetivo de la hormiga:

<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>
Publicado el 21/11/2008 a las 14:05
por usuario
En otros idiomas...                            


2 respuestas

votos
6

En su archivo de manifiesto, asegúrese de tener el atributo Main-Classestablecido en el nombre de la clase que contiene su main()método. Por ejemplo, si el nombre calificado para el paquete de la clase es my.cool.Class, entonces, en su manifiesto JAR, Main-Classdebe establecerse en my.cool.Class.

También se aseguró de tener una declaración de paquete en sus .javaarchivos (por ejemplo, en Class.java, asegúrese de tener la package my.cool;declaración adecuada ). Además, asegúrese de que su jerarquía de directorios esté configurada correctamente ( my.cool.Classdebería estarlo $SRC/my/cool/Class.java).

Respondida el 21/11/2008 a las 14:09
fuente por usuario

votos
4

Debe especificar su clase principal durante la creación de jar con ruta completa, algo así como:

<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>
Respondida el 21/11/2008 a las 14:13
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more