Maven: ¿cómo puedo agregar una entrada arbitraria de classpath a un jar?

Tengo una situación inusual en la que necesito agregar una entrada de ruta de clases arbitraria (que apunta a un archivo jar) en el manifiesto de un archivo ejecutable. (Esto es para una aplicación de escritorio Swing).

El maven-jar-plugin genera la entrada “Class-Path” para el manifiesto jar utilizando las dependencias maven, y no parece haber ninguna forma de agregar entradas arbitrarias.

También busqué hard-coding la entrada arbitraria de classpath en el archivo por lotes que inicia la aplicación, usando el parámetro “-classpath”, pero no puedo entender cómo hacer que Maven filtre el classpath en un archivo por lotes.

Descubrí que hay una solución fácil para este problema. Puede agregar un elemento a y establecer true en el elemento . Por lo tanto, el valor del elemento se agrega automáticamente a class-path. Ejemplo:

  org.apache.maven.plugins maven-jar-plugin    true true your.main.Class   ../conf/     

Actualización: Aquí se muestra cómo filtrar un classpath en un manifiesto personalizado.

El objective de build-classpath maven-dependency-plugin se puede configurar para generar el classpath a un archivo en el formato de propiedades (es decir, classpath = [classpath]). A continuación, configura el elemento de filtros para usar el archivo classpath generado y configura el directorio de recursos para filtrar.

Por ejemplo:

    maven-dependency-plugin 2.1   generate-resources  build-classpath     true ${project.build.directory}/classpath.properties    maven-jar-plugin    ${project.build.outputDirectory}/META-INF/MANIFEST.MF       ${project.build.directory}/classpath.properties    src/main/resources true    

A continuación, especifique lo siguiente en src / main / resources / META-INF / Manifest.MF:

 Bundle-Version: 4.0.0 ... Classpath: ${classpath};[specify additional entries here] 

Nota: hay un error con este proceso usando el separador de ruta de ventana estándar ( \ ), la ruta de generación está desprovista de separadores (tenga en cuenta que funciona bien en Linux). Puede hacer que la ruta de clases se genere correctamente para Windows especificando \\\\ en la configuración del objective de build-classpath .


Puede personalizar el manifiesto en la configuración del plugin jar . Para hacerlo, agregarías algo como esto a tu pom.

  org.apache.maven.plugins maven-jar-plugin ...   true  true   development ${pom.url} value    ...  

La especificación completa del archivador brinda bastantes opciones. Consulte la página de ejemplos para ver las opciones de configuración del classpath.

Si ninguno de estos funciona para usted, puede definir su propio Manifiesto , configurar las propiedades que contengan las entradas requeridas y usar un filtro para poblar el manifiesto con esas propiedades

Intenta hacerlo como lo hacen en este error, es decir, combina entradas usando el elemento manifestEntries / Class-Path

https://issues.apache.org/jira/browse/MJAR-41