2010-09-07 10 views
13

Estoy usando Maven, con el pluggin de un solo jar, pero cuando ejecuto el ejecutable de un jar, recibo un muro de advertencias, esto es inaceptable para el usoone-jar eliminar la información de advertencia detallada en la carga de la aplicación

He examinado todos los recursos disponibles en un contenedor y no veo instrucciones sobre cómo mantener el contenedor para arrojar toneladas de advertencias cuando se ejecuta, ¿alguien ha resuelto esto?

JarClassLoader: Warning: META-INF/LICENSE.txt in lib/commons-io-1.4.jar is hidden by lib/commons-collections-3.2.1.jar (with different bytecode) 
JarClassLoader: Warning: META-INF/NOTICE.txt in lib/commons-io-1.4.jar is hidden by lib/commons-collections-3.2.1.jar (with different bytecode) 
JarClassLoader: Warning: META-INF/LICENSE.txt in lib/commons-lang-2.4.jar is hidden by lib/commons-collections-3.2.1.jar (with different bytecode) 
JarClassLoader: Warning: META-INF/NOTICE.txt in lib/commons-lang-2.4.jar is hidden by lib/commons-collections-3.2.1.jar (with different bytecode) 
+2

Dudo las advertencias están relacionados con onejar. Podría estar relacionado con los frascos empaquetados dentro del uber-jar. ¿Te preocupa actualizar la pregunta con las advertencias que observas? –

+0

He añadido advertencias de las que estoy hablando, he hecho muchas búsquedas en Google y no he encontrado a nadie quejándose de algo similar, la aplicación funciona bien, pero como una aplicación de consola que ejecuto con argumentos del jarrón , tener cientos de líneas desplazándose por mi consola antes de que se ejecute la aplicación distrae y no me gusta – walnutmon

+0

Creo que esto es onejar, http://www.koders.com/java/fid47EFFE76AC8A4DF788B368D79D29DFE89BE94A19.aspx?s=ByteCode#L122 muestra el código fuente para el JarClassLoader, que está en un paquete de onejar, tiene las instrucciones de impresión que veo aquí. ¿Qué tipo de biblioteca java distribuida usa system.out en estos días? – walnutmon

Respuesta

-1

No hay manera de hacer esto sin modificar el código fuente

+2

Esto es falso. Usar "-Done-jar.silent = true" funcionó para mí. – ingyhere

+0

La respuesta de Pascal Thivent también funcionó – rapvelopment

+0

Versión 1.4.5 y el archivo one-jar.properties hace el truco como otros lo han mencionado. –

8

Parece que estos mensajes se imprimen cuando se ejecuta en modo "detallado". Lo que no entiendo es que el modo detallado no parece estar activado por defecto.

De todos modos, se intenta establecer la propiedad one-jar.verbose sistema para false cuando se ejecuta su uno-jar:

java -Done-jar.verbose=false -jar <one-jar.jar> 
+0

He examinado a fondo este problema, tiene toda la razón, lamentablemente el estado de este proyecto es que el complemento maven no le permite especificar la versión del código dependiente, por lo que la fuente que ve no está No es la fuente real que ejecuta el complemento ... alguien necesita volver a crear este complemento de la manera correcta porque hay problemas en las versiones de origen incluidas que se han corregido, pero no hay forma de llegar a ellas a través de maven. Terminé obteniendo una versión antigua para evitar estas salidas de sistema muy molestas, pero luego las cosas de la primavera se rompieron, así que elige mi veneno – walnutmon

+0

@walnutmon De tu descripción, las cosas no se ven bien: S –

+2

El 'java -Done-jar. verbose = false -jar 'truco no funciona para mí. – Withheld

1

Esto es mucho mejor en la nueva versión del plugin Maven one-jar.

Añadir el repositorio de plugins:

<pluginRepository> 
     <id>one-jar</id> 
     <url>http://onejar-maven-plugin.googlecode.com/svn/mavenrepo</url> 
    </pluginRepository> 

y utilizar la versión 1.4.4 en la definición del plugin.

+0

Necesitaré un tarro en un futuro muy cercano, cuando lo use probaré con lo que ha agregado anteriormente y, si funciona, acepto su respuesta. ¡Gracias! – walnutmon

+0

Estoy usando la versión 1.4.4, pero veo el mismo mensaje de advertencia. ¿Qué versión de one-jar está especificando (por ejemplo, ' 0.97')? –

0

He actualizado fromr 1.4.3 a 1.4.4 como alguien sugirió antes y que hizo el trato

9

He descubierto que si se crea un archivo one-jar.properties y ponerlo en la raíz de la ruta de clases de tiempo de ejecución (es decir, donde su proyecto .class archivos terminan), será leído por la clase de arranque de un solo contenedor. Una entrada en este archivo de propiedades como:

one-jar.silent=true 

suprimirá por completo los mensajes de registro de un solo contenedor.

Otros valores que la clase Boot busca son one-jar.info y one-jar.verbose.

El nivel predeterminado es INFO. Como Pascal Thivent indicó anteriormente, también puede configurar una propiedad del sistema a través de la línea de comando con el parámetro -D del comando java, pero si no desea tener que estipular o recordar esto, el enfoque del archivo de propiedades funciona de maravilla.

+1

Esto funciona pero la ubicación del archivo de utilería debe estar en la raíz del jar final. – ingyhere

+0

@ingyhere, ¿cómo poner este archivo en la raíz del contenedor final? – Alexandr

+0

@Alexandr La manera más fácil es abrirlo con 7-zip y soltarlo. – ingyhere

0

Hay dos lugares para obtener el plugin de una jarra.

  1. https://github.com/jolira/onejar-maven-plugin
  2. http://code.google.com/p/onejar-maven-plugin/

El primero uno afirma ser sólo una copia de la segunda uno que sirve de repositorio central de Maven. Me animaron a usar este ya que no requiere especificar un repositorio adicional que el segundo requiere. Sin embargo, cuando cambié para usar el segundo (el oficial), este problema desapareció.

Nota: pasar -Done-jar.verbose = false funcionó para mí, pero no cuando se configuró en el archivo one-jar.properties como mencioné anteriormente.

3

En cuanto al último y más grande One-Jar v0.97: El problema está ahí.El archivo 'one -jar.properties' realmente necesita colocarse en la raíz del jar final. Por supuesto, tendrá una línea que dice: one-jar.silent=true. Esto se puede hacer en Ant configurando algo como <fileset dir="${build.dir}" includes="**/*.properties" /> dentro de la tarea <one-jar ...>.

También se puede colocar con la misma facilidad en la línea de comando utilizando el comando java -Done-jar.silent=true -jar foo-jar-made-by-one-jar.jar.

Sin embargo, seguirá reportando una sola línea que está cargando las propiedades de la clase de arranque interno de One-Jar antes de quedarse en silencio. No hay forma de evitar esto sin cambiar el código fuente comenzando en la línea 317 en Boot.java donde el método initializeProperties registra las operaciones de carga/fusión. Consulte Error ID 3609329 en SourceForge en el rastreador de errores One-Jar donde proporcioné la solución rápida.

Resumen: Al agregar el archivo one-jar.properties, se eliminan todas las líneas de registro extrañas excepto una. Esto debería ayudar a los usuarios de Maven a encontrar una solución alternativa.

1

me pareció que tenía que utilizar la versión 1.4.5 (1.4.4 no funcionó) y luego la sugerencia de añadir un archivo one-jar.properties en la raíz de mi archivo frasco con una sola línea leyendo one-jar.silent=true funcionó para mí.

0

Envié un parche para esto hace bastante tiempo que simplemente silencia el comportamiento predeterminado.

public static final int LOGLEVEL_VERBOSE = 5; 

    // Loglevel for all loggers. 
- private static int loglevel = LOGLEVEL_INFO; 
+ private static int loglevel = LOGLEVEL_NONE; 

    private final String prefix; 

AFAIK, nunca se aplicó. Recientemente me fijo otro tema, así que puse mis correcciones aquí:

https://github.com/nsoft/uno-jar

Por favor, vuelva a leer el "como es, sin garantía" parte de la licencia varias veces :)

Cuestiones relacionadas