plugin gradle

plugin - ¿Cuál es el equivalente de gradle del complemento exec de maven para ejecutar aplicaciones Java?



gradle java (2)

Con maven puedo crear un proyecto, configurar mi pom con sus dependencias, escribir una clase con un método principal y luego ejecutarlo escriba:

mvn compile exec:java -Dexec.mainClass=thornydev.App

¿Cuál es el equivalente de gradle de hacer esto?

Puedo hacer gradle build , que crea un archivo jar para mí, pero si la clase principal tiene dependencias de otros archivos jar, simplemente ejecutando el archivo jar no funcionará sin configurar el classpath. ¿El plugin java de Gradle puede ejecutar la aplicación y configurar el classpath para mí?

Estoy buscando una solución de línea de comandos para usos únicos y no una integración IDE (sé cómo hacerlo).


La solución más sencilla es utilizar el complemento de aplicación , que entre otras cosas proporciona una tarea de run . Para hacer que la clase principal sea configurable desde la línea de comandos, deberá establecer mainClassName en el valor de alguna propiedad del sistema (o proyecto) y luego pasar esa propiedad desde la línea de comandos:

apply plugin: "application" mainClassName = System.getProperty("mainClass")

Ahora puede ejecutar la aplicación con gradle run -DmainClass=thornydev.App .


Necesitaba ejecutar un programa Java como parte del proceso de compilación, y el complemento de la aplicación incluía demasiado equipaje.

Hice fidde con el complemento de la aplicación, pero al final usé el complemento JavaExec mucho menos "invasivo".

Tengo un archivo de clase MyObfuscator.class en build.outputDirectory y antes tenía un pom.xml como este, que ejecutaba la ofuscación de código en el directorio de compilación con dos parámetros:

<project> ... <build> ... <plugins> ... <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <executions> <execution> <id>obfuscate</id> <phase>package</phase> <goals> <goal>exec</goal> </goals> <configuration> <executable>java</executable> <workingDirectory>${project.build.outputDirectory}</workingDirectory> <arguments> <argument>-Djava.library.path=.</argument> <argument>-classpath</argument> <argument>${project.build.outputDirectory}:lib.jar</argument> <argument>MyObfuscator</argument> <argument>HELLO</argument> <argument>GOODBYE</argument> </arguments> </configuration> </execution> </executions> </plugin> ... </plugins> </build> ... </project>

Lo reducí a esto en Gradle:

apply plugin: "java" // ... task obfuscate(type: JavaExec) { // Make sure it runs after compilation and resources. // Skip this if that''s not a requirement. dependsOn classes // run in the buildDir (this requirement was what // made a simple "doLast" infeasible) workingDir = file(buildDir) classpath = files([ "${buildDir}/classes", "${buildDir}/resources/main/lib.jar" ]) main = "MyObfuscator" }

Si necesita una ejecución parametrizada como en el ejemplo de Maven anterior, agregue algunas líneas a la tarea:

task obfuscate(type: JavaExec) { // ... (as above) // Set PARAM1 to a default value when it''s not // defined on the command line if(!project.hasProperty("PARAM1")) { ext.PARAM1 = "HELLO" } // PARAM1 is dynamic and PARAM2 is static, always "GOODBYE" args = [PARAM1, "GOODBYE"] }

Luego, dependa la tarea de assemble del obfuscate (ponga esta línea en cualquier lugar debajo de la definición de la tarea de obfuscate ):

assemble.dependsOn obfuscate

O dejar que la tarea jar (anterior) dependa de ello. Vea el gráfico al final de esta sección de documentos para obtener más ideas sobre dónde inyectar esto.

Luego puede llamar a gradle como gradle build -PPARAM1=HELLO para ejecutar una construcción parametrizada.