java - seguridad - error al ejecutar un archivo jar
Problema al ejecutar un archivo Jar (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>
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>
En su archivo de manifiesto, asegúrese de tener el atributo Main-Class
configurado para el nombre de la clase que contiene su método main()
. Por ejemplo, si el nombre calificado para el paquete de la clase es my.cool.Class
, entonces, en su manifiesto JAR, Main-Class
debe establecerse en my.cool.Class
.
También se aseguró de tener una declaración de paquete en sus archivos .java
(por ejemplo, en Class.java
, asegúrese de tener el package my.cool;
apropiado package my.cool;
declaration). Además, asegúrese de que su jerarquía de directorios esté configurada correctamente ( my.cool.Class
debe estar en $SRC/my/cool/Class.java
).