Tengo un programa en Java que lee un Sistema de propiedad

System.getProperty("cassandra.ip");

y tengo un Gradle construir archivo que voy a empezar con

gradle test -Pcassandra.ip=192.168.33.13

o

gradle test -Dcassandra.ip=192.168.33.13

sin embargo Sistema.getProperty siempre devolverá null.

La única manera que encontré fue que añadir que en mi Gradle construir un archivo a través de

test {
    systemProperty "cassandra.ip", "192.168.33.13"
}

¿Cómo puedo hacerlo a través de la -D

  • ¿Qué sucede cuando se utiliza gradle -Dcassandra.ip=192.168.33.13? De todos modos, la tarea de prueba de las horquillas de uno o varios nuevos Jvm. Así que tendrás que pasar propiedades explícitamente. Nadie te obliga a codificar su valor en la construcción, sin embargo.
  • También echa un vistazo en esta respuesta: stackoverflow.com/questions/23689054/…
InformationsquelleAutor robkuz | 2014-01-28

5 Comentarios

  1. 103

    La opción-P es para gradle propiedades, y la opción-D es para las propiedades de JVM. Debido a que la prueba puede ser bifurcada en un nuevo JVM, el argumento-D pasa a gradle no se propagan a la prueba – suena como que es el comportamiento que está viendo.

    Puede utilizar el systemProperty en su test bloque como usted ha hecho, pero la base de que en la entrada de gradle de la propiedad por la que pasa con ella -P:

    test {
        systemProperty "cassandra.ip", project.getProperty("cassandra.ip")
    }

    o, alternativamente, si estás de paso en via -D

    test {
        systemProperty "cassandra.ip", System.getProperty("cassandra.ip")
    }
    • Este no me funciona (probado usando System.getProperties().stringPropertyNames().forEach(System.out::println); en el código de Java, no aparece)
    • Advertencia: getProperty lanza MissingPropertyException si la propiedad no se encuentra. Uso Eron la respuesta de lugar: stackoverflow.com/a/43112126/915441
    • Valores por defecto para gradle.properties evitará que el MissingPropertyException.
    • I puede obtener ninguno de estos métodos de trabajo. Lo que puedo hacer myProperty siempre es null. Esto incluye todos los métodos mencionados a continuación, demasiado. Me pregunto si esto es algo para hacer con una versión más reciente, como todos los comentarios son de 2018? @CLOVIS hizo a encontrar una solución a esto?
    • Yo sólo quería saber si la construcción de pruebas o normalmente se ejecuta, así que he usado la propiedad gradle suma, cuando las pruebas; se puede ver el código aquí: github.com/CLOVIS-AI/wildfyre-java/blob/master/src/main/java/…
  2. 26

    Llegó a través de este muy mucho problema, excepto que yo no quiero la lista de todas las propiedades en la línea de comandos en el gradle secuencia de comandos de nuevo. Por lo tanto, puedo enviar todas las propiedades del sistema para mi prueba

    task integrationTest(type: Test) {
        useTestNG()
        options {
            systemProperties(System.getProperties())
        }
    }
  3. 8

    Tuve un caso en el que tuve que pasar múltiples propiedades del sistema en la prueba de la JVM, pero no todos (no quiero pasar en irrelevantes). Basado en las respuestas anteriores, y mediante el uso de subMap para filtrar los necesitaba, esto funcionó para mí:

    task integrationTest(type: Test) {
        //... Do stuff here ...
        systemProperties System.getProperties().subMap(['PROP1', 'PROP2'])
    }

    En este ejemplo, sólo PROP1 y PROP2 se pasa, si es que existen en gradle la JVM.

  4. 4

    Esta es una variante que pasa por numerosas propiedades del proyecto para la prueba de la JVM como propiedades del sistema. Yo prefiero propiedades del proyecto sobre las propiedades del sistema para aumentar la flexibilidad.

    task intTest(type: Test) {
        systemProperties project.properties.subMap(["foo", "bar"])
    }

    Que pueden ser aprobadas en la línea de comandos:

     $ gradle intTest -Pfoo=1 -Pbar=2

    Y se recuperan en la prueba:

    String foo = System.getProperty("foo");
    • Cuando se ejecuta System.getProperty("someprop") el uso que subMap método, tengo {someprop=foo} en lugar de foo. Tuve que usar systemProperty "foo", project.properties.subMap(["foo"]).get("foo") en construir.gradle
    • donde (cómo) fueron que el uso de systemProperty "foo"? es decir, me estoy preguntando para ver toda la línea de código donde se utiliza? Estoy tratando de todo lo sugerido en esta pregunta y todavía Gradle no pasa ningún argumento. Con la esperanza de que esto podría resolver!
    • Lo siento, no quise mantener mi código, así que ya no sé :\ estoy de acuerdo en que parece fuera de lugar.
    • Gracias @YngvarKristiansen. Desde entonces he trabajado fuera de que mi problema era causado por la junit plugin de gradle que estaba incluido en mi gradle.construir. Muy extraña.
  5. 0

    Así que me he tropezado en que el problema de hoy, y lo que funcionó para mí fue la siguiente:

    ext.env='prod'
    test {
      systemProperty 'env', System.properties['env'] ?: "${env}"
      println "# test environment: " + systemProperties['env']
      ...
    }

    Voy a llamar a mi tarea de prueba utilizando -Penv=dev me llego mi ‘dev’ valor en mi impresión, o ‘prod’ si yo no enviar ningún valor, que es el comportamiento esperado para mí.

    Valor también es accesible en el lado de java, utilizando Sistema.getProperty(«env»).

    Mi conclusión sobre el asunto es que el valor de entrada (parámetro) es, en realidad, almacenados bajo Sistema, por lo que es accesible a través de cualquiera de Sistema.propiedades[‘env’] o Sistema.getProperty(«env»), mientras que la de salida (sistema de propiedad) se almacena en un systemProperties de la matriz, lo que es legible a través de systemProperties[‘env’].

Dejar respuesta

Please enter your comment!
Please enter your name here