Running an executable JAR from a remote maven repo


(John Cartwright) #1

Hello All,

I’m trying to create a very simple script to execute a JAR file retrieved from a remote repository, e.g. “java -jar myfile.jar”. The script below works but requires me to inspect the MANIFEST.MF to get the Main-Class, which defeats the purpose.

Can someone please help me?

Thanks!

–john

apply plugin: 'java'

repositories {
    maven {
        url 'http://artifacts.unidata.ucar.edu/content/repositories/unidata-releases'
    }
}

dependencies {
    runtime "edu.ucar:toolsUI:4.6.4"
}

//goal is to be able to execute equivalent of "java -jar toolsUI-4.6.4.jar"
task runToolsUI(type: JavaExec) {
    main = "ucar.nc2.ui.ToolsUI"
    classpath = sourceSets.main.runtimeClasspath
}

(Lance Java) #2

It might work using jvmArgs (not 100% sure but worth a try)

configurations {
    toolsUi
}
dependencies {
    toolsUi "edu.ucar:toolsUI:4.6.4"
}
task runToolsUI(type: JavaExec) {
    jvmArgs ['-jar', configurations.toolsUi.singleFile.absolutePath]
}

(John Cartwright) #3

Thanks for the suggestion, but it still seems to require the “main” property using the below:

jvmArgs = ['-jar', configurations.toolsUIRuntime.singleFile.absolutePath]

–john


(Lance Java) #4

Hmm… That’s what I was worried about. Perhaps you could roll your own task using JavaExec.java as a reference.

Eg

task runToolsUI << {
   ExecActionFactory factory = gradle.getService(ExecActionFactory)
   JavaExecAction action = factory.newJavaExecAction() 
   action.setJvmArgs ['-jar', configurations.toolsUi.singleFile.absolutePath]
   action.execute()
} 

*** edit ***
This aporoach won’t work as the main class requirement is coded in the base class of DefaultJavaExecAction. You may need to roll your own Exec task