2012-02-15 7 views
7

La secuencia de comandos de generación Ant tengo hace lo siguiente: Realicemkdir in ant failed. ¿Cómo puedo controlar este error

  1. las compilaciones en el servidor Windows & Zip los binarios
  2. asignar una unidad de red con diferentes credenciales en una unidad local (ex P :) utilizando net use
  3. estoy usando <mkdir> para crear un directorio en la unidad montada (P :)
  4. Copiar los binarios a esa unidad

A continuación se muestra el código de mkdir

<echo>Creating ${buildRequesterUserId} folder at mirroring site starts</echo> 
<mkdir dir="P:\build_output\${buildRequesterUserId}"/> 
<echo>Creating ${buildRequesterUserId} folder at mirroring site ends</echo> 

algún tiempo la creación de obras de carpeta y algún tiempo se produce un error con el error a continuación

creation was not successful for an unknown reason y hace que la construcción falle

Este error ocurre al azar. El Mkdir funciona un tiempo. No estoy seguro de por qué falla y no estoy seguro si es debido a un retraso de red

también el directorio que intento crear puede o no existir. Leí que el mkdir no hace nada si el directorio ya existe

Lo he verificado y no hay failonerror para mkdir. No quiero que la compilación falle por esto.

he controlado el error en copy parte pero no sabe cómo manejar este mkdir

¿Cómo se puede lograr esto? Cualquier ayuda se agradece

Saludos

Karthik

+0

si no te importa podrías comentar mi respuesta y describir qué parte de ella resolvió el problema para ti (si realmente lo resolvió :) –

+0

¿tienes permisos de escritura? – jgr208

Respuesta

2

tareas Apache Ant Mkdir está llamando File.mkdirs() método que es vulnerable to race conditions.

File.mkdirs() no es una operación atómica - Supongo que se implementa como una secuencia de llamadas mkdir.

En el caso de un sistema de filmación remoto existe una buena posibilidad de que su host se dé cuenta de los cambios en el sistema de archivos en el medio de la operación File.mkdirs() y falla.

Ant parecía tratar de solucionarlo lo Mkdir código cambiado de esto en 1.8.0

boolean result = mkdirs(dir); 
if (!result) { 
    String msg = "Directory " + dir.getAbsolutePath() 
     + " creation was not successful for an unknown reason"; 
    throw new BuildException(msg, getLocation()); 
} 

a esto en 1.8.2

boolean result = mkdirs(dir); 
if (!result) { 
    if (dir.exists()) { 
    log("A different process or task has already created " 
     + "dir " + dir.getAbsolutePath(), 
     Project.MSG_VERBOSE); 
    return; 
    } 
    String msg = "Directory " + dir.getAbsolutePath() 
     + " creation was not successful for an unknown reason"; 
    throw new BuildException(msg, getLocation()); 
} 

así que tal vez actualizar a la última hormiga podría ayudar?

Si no, se podría crear una extensión de tarea de fuerza bruta Mkdir con su propia implementación de método execute().

Si no, Trycatch task de Ant Contrib funcionará.

+0

Actualizando la ANT. Probé con 1.7x esto todavía falla. No he probado TryCatch ya que no tengo AntContrib. pero creo que esto también me ayudará a capturar el error – KK99

+0

dijo que el cambio fue entre 1.8.0 y 1.8.2, por lo que actualizar a 1.7.x no ayudará ... – orirab

-4

Así es como lo resolví:

  1. Abra el archivo de build.properties (En realidad abrir todos los archivos de propiedades referencia desde build.xml)
  2. comprobar que no existen espacios finales y las pestañas en cualquier línea de el archivo.
  3. Agregue una línea en blanco adicional al final del archivo.
+0

¿Puedo saber cuál es la razón detrás de esto? –

0

Puede usar la tarea COPIA para crear directorios (subdirectorios inclusivos).

1

Para mí, tuve un problema similar con la versión 1.9 de hormiga.

me Eliminación de un directorio y de inmediato re-crearla:

A pesar de que el directorio fue local (no una unidad de red), la adición de un sueño 1 segundo entre ambas operaciones ha solucionado el problema para mí :

<delete dir="${jar.dir}"/> 
<sleep seconds="2"/> 
<mkdir dir="${jar.dir}"/> 
+0

O use [Reintentar tarea] (http://stackoverflow.com/a/23998066/2818782) – user2818782

0

Para mí fijación de la cuestión en Linux era tan simple como ejecutar como usuario sudo

"sudo hormiga"

Cuestiones relacionadas