2009-08-06 24 views

Respuesta

17

Tenga en cuenta que puede crear un manifiesto sobre la marcha a través de una tarea ant y establecer propiedades dinámicamente.

Primero, debe actualizar su archivo "project.properties" de Netbeans que se encuentra en el directorio "nbproject". Agregue la siguiente línea al archivo:

manifest.file=manifest.mf 

A continuación, cree una tarea de hormiga para crear/actualizar el manifiesto mediante el archivo "build.xml". En este ejemplo, estableceremos el número de versión y la fecha del archivo jar.

<target name="-pre-init"> 
    <property name="project.name" value="My Library" /> 
    <property name="version.num" value="1.4.1" /> 
    <tstamp> 
     <format property="NOW" pattern="yyyy-MM-dd HH:mm:ss z" /> 
    </tstamp> 

    <!-- 
    <exec outputproperty="svna.version" executable="svnversion"> 
     <arg value="-c" /> 
     <redirector> 
      <outputfilterchain> 
       <tokenfilter> 
        <replaceregex pattern="^[0-9]*:?" replace="" flags="g"/> 
        <replaceregex pattern="M" replace="" flags="g"/> 
       </tokenfilter> 
      </outputfilterchain> 
     </redirector> 
    </exec> 
    --> 


    <manifest file="MANIFEST.MF"> 
     <attribute name="Bundle-Name" value="${project.name}" />   
     <attribute name="Bundle-Version" value="${version.num}" /> 
     <attribute name="Bundle-Date" value="${NOW}" /> 
     <!--<attribute name="Bundle-Revision" value="${svna.version}" />--> 
     <attribute name="Implementation-Title" value="${project.name}" /> 
     <attribute name="Implementation-Version" value="${version.num}" /> 
     <attribute name="Implementation-URL" value="http://www.example.com" /> 
    </manifest> 

</target> 

Esto creará un archivo de manifiesto en su directorio de proyecto netbeans y lo incluirá en su archivo jar. Si desea borrar el archivo de manifiesto autogenerado desde el directorio del proyecto NetBeans, sólo tiene que crear otra tarea ant (post frasco por supuesto):

<target name="-post-jar"> 
    <delete file="MANIFEST.MF"/> 
</target> 
+0

Esto funciona muy bien, ¡gracias! Pero, ¿por qué no cambian la Codebase y los Permisos (aún está configurado de manera predeterminada). ¿No se puede cambiar esto aquí? – hgerdin

1

en el mismo directorio que el build.xml puede poner su archivo manifest.mf

estoy usando Netbeans 6.7.1 Resulta que la acumulación de imp.xml (la escritura de la estructura real de Netbeans utiliza)

  • no tiene un objetivo que se ejecuta si 'con el manifiesto, sin principal de clase'
  • pero tiene uno igual 'con manifiesta, la principal clase'

Así que .. asegurarse de que tiene las propiedades del proyecto-de gestión, la principal clase llena de -cualquier cosa-

Creo que eso es alguna característica no documentada :(

esta es mi contenido manifiesto:

Manifest-Version: 1.0 
X-COMMENT: Main-Class will be added automatically by build 
Bundle-ManifestVersion: 2 
Bundle-Name: jinstall 
Bundle-SymbolicName: jinstall 
Import-Package: (....) 
Export-Package: (....) 
Bundle-Activator: (.....) 
+0

Sí, pero el problema con esto es que NetBeans niega cualquier propiedad que no entiende, y no entienden mucho. Todas las propiedades de osgi como Bundle-ManifestVersion o Bundle-Activator son rechazadas. –

+0

No tengo ese problema en netbeans ordinarios 6.7.1 java-project. Puedo completar cualquier propiedad Bundle-xxxx en el manifiesto personalizado. Lo que sucedió en mi caso fue que ignoró por completo el archivo de manifiesto completo y creó un manifiesto predeterminado. – Houtman

-2

Ver this article.

Aquí se describe cómo

  • crear propias tareas ant
  • añadir entradas manuales a manifest.mf para el JAR de salida
  • run objetivos encargo de hormigas de Netbeans
+0

El artículo al que se hace referencia no habla muy directamente a esta pregunta. Si te estás refiriendo a la tarea de hormiga personalizada ... ese no es un enfoque muy bueno para la simple tarea de agregar una entrada al manifiesto, en mi humilde opinión. –

6

Interesante la información puede estar aquí:

http://wiki.netbeans.org/FaqNoMainClass

+2

¡Esta es la respuesta correcta! Simplemente cree el manifest.mf deseado en la raíz del proyecto y anexe "manifest.file = manifest.mf" al archivo project.properties. Suponiendo que su proyecto no está estableciendo ningún valor en el manifiesto dinámicamente, eso es. Si necesitas ser elegante aquí, ¡es hora de recurrir a maven! –

+0

Yepp. Esta es probablemente la mejor solución. Aunque de manera óptima, me gustaría que hubiera mejores opciones de GUI para modificar lo que termina en el archivo de manifiesto. Pero por ahora, esto servirá. – UmaN

+0

Esto no funcionó para mí en NB 8. – Yster

2

Tengo un proyecto de Java Class Library con un archivo de manifiesto personalizado, perfecto para un paquete OSGI. Para conseguir este trabajo de edición primeros project.properties y establecer:

manifest.file=manifest.mf 
manifest.available=true 

crear su propio archivo manifest.mf personalizado en el directorio del proyecto.

(En este punto si intentas limpiar/compilar aún no obtendrás tu archivo de manifiesto personalizado - NetBeans proporcionará el suyo propio. Esto se debe a que el objetivo build-impl.xml Ant "-do-jar-with -libraries-without-manifest "se está llamando inmediatamente después de" -do-jar-with-manifest ", sobrescribiendo el archivo JAR de manifiesto personalizado con un JAR de manifiesto de NetBeans predeterminado)

Agregue un destino personalizado a su build.xml archivo de la siguiente manera:

<target name="-do-jar-with-libraries-without-manifest"> 
    <!-- Inserted to prevent target from running so we can have a custom 
     manifest file with a class library project type. --> 
</target> 

Probado en NetBeans 6.7.1

Cuestiones relacionadas