instalar - Expansión de comodines rotos para la línea de comandos de Java7 en Windows(7?)
java 7 64 bits (2)
Observo un comportamiento extraño de comportamiento de expansión de comodín para Java7 en Windows.
Durante siglos hubo una clara diferencia entre "*" y *.
Parece que esto ya no es cierto para Java7 (al menos en Windows7).
Noté el problema al usar un classpath comodín .
A pesar de citar el comodín-classpath se expande.
Por lo tanto, parece que ya no es posible pasar un comodín a la aplicación java.
Entonces, el uso de java -cp "somewhere/*"
fallará (al igual que "somewhere/*"
).
Una solución parece ser: java -cp "somewhere/*;"
Lo que inhibe la expansión.
Para verificar el comportamiento escribí una pequeña clase Echo.java.
Descubrí que usar java 1.6.0 entre comillas "*" y plain * funciona como se esperaba, mientras que en Java7 siempre obtuve el comodín ampliado. Hasta ahora, esto se observó en Windows7, no sé qué sucede en XP.
El problema surge, ya que los comodines en Windows nunca se expanden en la era oscura CMD.EXE (como cualquier shell en UNIX). En su lugar, cada ejecutable tiene que realizar esto explícitamente utilizando setargv.obj .
Encontré dos problemas relacionados que parecen describir un problema similar:
- La expansión de comodines de múltiples líneas de comando confunde a los usuarios de Windows
- Manejo de comodines setargv.obj roto
¿Esto es observado por alguien más?
¿O hay alguna configuración oscura de Windows o de archivo por lotes para controlar esto?
Dieter.
No es una solución directa al problema / * roto, pero espero que pueda usar el siguiente script para aliviar su situación.
libDir2Scan4jars="../test";cp=""; for j in `ls ${libDir2Scan4jars}/*.jar`; do if [ "$j" != "" ]; then cp=$cp:$j; fi; done; echo $cp| cut -c2-${#cp} > .tmpCP.tmp; export tmpCLASSPATH=`cat .tmpCP.tmp`; if [ "$tmpCLASSPATH" != "" ]; then echo .; echo "classpath set, you can now use ~> java -cp /$tmpCLASSPATH"; echo .; else echo .; echo "Error please check libDir2Scan4jars path"; echo .; fi;
Scripted para Linux, también podría tener uno similar para Windows. Si se proporciona el directorio adecuado como entrada para "libDir2Scan4jars"; la secuencia de comandos escaneará todos los archivos jar, creará una cadena de ruta de clase y la exportará a una variable env "tmpCLASSPATH".
Sí, me di cuenta del mismo problema.
Se explica como un ''problema conocido'' en las notas de la versión 4 de la actualización Java7 .
Aquí está el informe de error . La solución se entregará en la actualización 8 de Java7 (la versión actual es la actualización 6).
Tenga en cuenta que no hay una solución alternativa para las opciones de shell, porque en Windows, la shell no admite la expansión de comodines. (Mientras que en Unixes, el shell realiza la expansión).