Utilicé las instrucciones que se encuentran en https://stackoverflow.com/a/5893391/14731 para agregar una entrada arbitraria al atributo Class-Path
. Aquí está mi archivo MANIFEST.MF:JAR ejecutable ignora su propio atributo Class-Path
Manifest-Version: 1.0
Class-Path: jace-runtime.jar
Main-Class: org.jace.examples.Test
he definido org.jace.examples.Test de la siguiente manera:
public class Test
{
public static void main(String[] args)
{
System.out.println("classpath: " + System.getProperty("java.class.path"));
System.out.println("PeerExample: " + Class.forName("org.jace.util.ShutdownHook"));
}
}
donde org.jace.util.ShutdownHook
se define en jace-runtime.jar
. Cuando invoco java -jar peer_example1.jar
me sale el siguiente resultado:
classpath: peer_example1.jar
Excepción en hilo java.lang.ClassNotFoundException "principal": org.jace.util.ShutdownHook
En otras palabras, Java está agregando el archivo JAR ejecutable al classpath pero ignorando Class-Path
. Si invoco java -cp jace-runtime.jar;peer_example1.jar org.jace.examples.Test
consigo la salida esperada:
classpath: jace-runtime.jar;peer_example1.jar
¿Alguna idea?
Es posible que necesite ../jace-runtime.jar si la raíz del jar se considera como el directorio de trabajo actual. –
@MarkoTopolnik: lo probé. No funcionó. – Gili
¿Pero ha intentado acceder a una clase en ese otro contenedor?Parece que java.class.path no refleja la lectura de classpath del manifiesto. –