2010-05-17 31 views
16

Tengo el siguiente problema. Tengo un proyecto Java en mi NetBeans IDE 6.8. Cuando lo compilo y produce un archivo .jar que contiene todo lo posible, el META-INF no está bien. No contiene la clase que se ejecutará con el método main().Cómo configurar la clase principal en el archivo de manifiesto en el contenedor producido por el proyecto NetBeans

Cuando hago clic en el botón Ejecutar dentro del IDE, todo funciona. La configuración del proyecto también se establece de la manera correcta, apuntando a una clase en mi proyecto.

Intenté agregar una carpeta META-INF con el archivo de manifiesto pero no lo logré.

Hay una manera de hacerlo manualmente en NetBeans, porque descubrí que si agrego la clase principal faltante en el manifiesto, todo funciona.

(supongo que llegué a una especie de insecto ...)

// editar: El resultado que busco es que quiero el frasco que se crea con la acumulación de NetBeans para ser ejecutable con comando:

Presupuesto de Sun Documentation:

Cuando la clase principal se encuentra en el archivo de manifiesto, puede ejecutar la aplicación desde la línea de comandos: java -jar app.jar

+0

primero hay dos tipos de jarras que puedes crear ... una es una simple "jarra" y la otra es una "jarra ejecutable". Seguro que has creado el correcto? nunca intenté esto en netbeans, pero eclipse te proporciona un wizzard para crear un jar ejecutable, allí puedes seleccionar tu clase principal. ¡Me sorprendería que Netbeans no ofrezca una guía similar! –

+0

@Philipp Andre: no estoy seguro de si hay tal asistente, pero hay una ventana "project preferences" y allí dice mi Main.class pero después de compilación - nada dentro del archivo de manifiesto –

+1

Esto solucionó mi problema, pero encontré esta solución primero así que quería publicar aquí http://stackoverflow.com/questions/15282098/netbeans-maven-project-not-adding-main-class-to-manifest –

Respuesta

26

¡Voy a hacer un resumen de las soluciones propuestas y la que me ayudó!

Después de leer este informe de error: bug in the way NetBeans 6.8 creates the jar for a Java Library Project.

  1. crear un manifiesto.archivo mf en mi raíz de proyecto

  2. Editar manifest.mf. El mío se veía algo como esto:

    Manifest-Version: 1.0 
    Ant-Version: Apache Ant 1.7.1 
    Created-By: 16.3-b01 (Sun Microsystems Inc.) 
    Main-Class: com.example.MainClass 
    Class-Path: lib/lib1.jar lib/lib2.jar 
    
  3. /nbproject/project.properties de archivos abiertos

  4. Agregar línea de

    manifest.file=manifest.mf

  5. Clean + estructura del proyecto

Ahora el .jar es éxito construir completamente

Muchas gracias vkraemer

+0

funciona bien. supongo que usaré más de 25 jar. cómo especificar todo el nombre de la biblioteca en class-path? – BasK

+0

Para aquellos que se preguntan qué significan com, example y MainClass: [Tutorial de Oracle] (https://docs.oracle.com/javase/tutorial/deployment/jar/appman.html) _Queremos ejecutar el método principal en la clase MyClass en el paquete MyPackage cuando ejecutamos el archivo JAR. 'Main-Class: MyPackage.MyClass' (no funcionó para mí) – Heinzlmaen

3

Es simple.

  • Haga clic derecho sobre el proyecto
  • Ir a Propiedades
  • Ir a Run en Categorías árboles
  • Ajuste el Clase Principal en el panel lateral derecho.
  • construir el proyecto

Eso es todo. Espero que esto ayude.

+2

esto no ayuda - Lo he descrito en la pregunta –

+0

Lo siento por mi publicación. Perdió su línea en su pregunta. –

+0

no funciona para mí..después de limpiar el proyecto es dar clase anterior otra vez – asiya

0

Agregar manifest.file = manifest.mf a project.properties y crear el archivo manifest.mf en el directorio del proyecto funciona bien en NB 6.9 y debería funcionar también en NB 6.8.

0

Este es un problema aún a partir de 7.2.1. Cree una biblioteca porque no sabe lo que hará si la convierte en una aplicación & que está atornillada.

No obstante, he encontrado cómo solucionar esto. nbproject/project.properties editar, cambiar la línea siguiente al falso como se muestra:

mkdist.disabled=false

Después de esto se puede cambiar la clase principal en propiedades y se verá reflejado en el manifiesto.

1

En 7.3 solo habilite Propiedades/Construir/Empaquetar/Copiar bibliotecas dependientes y la clase principal se agregará al manifiesto cuando se construya dependiendo del objetivo seleccionado.

0

El verdadero problema es cómo Netbeans JARs sus proyectos. La "Ruta de clase:" en el archivo de Manifiesto es innecesaria al publicar su programa para que otros lo usen. Si tiene una biblioteca externa agregada en Netbeans, actúa como un paquete. Sugiero que use un programa como WINRAR para ver los archivos dentro del contenedor y agregar sus bibliotecas como paquetes directamente en el archivo jar.

Cómo el interior del archivo jar debe buscar:

MyProject.jar 

    Manifest.MF 
     Main-Class: mainClassFolder.Mainclass 

    mainClassFolder 
     Mainclass.class 

    packageFolder 
     IamUselessWithoutMain.class 
0

leo y leo y leo de averiguar por qué me estaba poniendo un error de clase no encontrado, resulta que el manifest.mf tenían un error en la línea:

Main-Class: com.example.MainClass 

que fija el error de ir a Propiedades del proyecto de diálogo (botón derecho del ratón archivos de proyecto), entonces Ejecute y clase principal y corrija lo que sea que Netbeans decidió poner aquí. Netbean insertó el nombre del proyecto en lugar del nombre de la clase. No tengo idea por qué. Probablemente ebrio en muratina ...

Cuestiones relacionadas