Skip to content

Instantly share code, notes, and snippets.

@darylteo
Last active August 29, 2015 14:10
Show Gist options
  • Select an option

  • Save darylteo/1662a693f11a44cc2cac to your computer and use it in GitHub Desktop.

Select an option

Save darylteo/1662a693f11a44cc2cac to your computer and use it in GitHub Desktop.
JarExec task - supporting execution of Jars (i.e. java -jar). Place in buildSrc/src/main/java/org/gradle/api/tasks/JarExec
class JarExec extends JavaExec {
private String jar;
public void setJar(String jar) {
this.jar = jar;
}
public String getJar() {
return this.jar;
}
public void jar(String jar) {
this.jar = jar;
}
@TaskAction
public void exec() {
if(this.jar == null) {
throw new RuntimeException("Jar not specified");
}
this.setMain('-jar');
List<String> args = this.getArgs();
args.add(0,this.jar);
this.setArgs(args);
super.exec();
}
public String getMain(){
throw new MissingMethodException("getMain", JarExec.class);
}
public JavaExec setMain(String main){
throw new MissingMethodException("setMain", JarExec.class, main);
}
public JavaExecSpec main(String main){
throw new MissingMethodException("main", JarExec.class, main);
}
}
task run(type: JarExec) {
jar 'build/libs/simplest-proj-1.0-SNAPSHOT-fat.jar'
}
/*
* Copyright 2011 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.gradle.api.tasks;
import org.gradle.api.file.FileCollection;
import org.gradle.api.internal.ConventionTask;
import org.gradle.api.internal.file.FileResolver;
import org.gradle.api.internal.tasks.options.Option;
import org.gradle.process.JavaExecSpec;
import org.gradle.process.JavaForkOptions;
import org.gradle.process.ProcessForkOptions;
import org.gradle.process.internal.DefaultJavaExecAction;
import org.gradle.process.internal.JavaExecAction;
import javax.inject.Inject;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
/**
* Executes a Java application in a child process.
* <p>
* The process can be started in debug mode (see {@link #getDebug()}) in an ad-hoc manner by supplying the `--debug-jvm` switch when invoking the build.
* <pre>
* gradle someJavaExecTask --debug-jvm
* </pre>
*/
public class JarExec extends ConventionTask {
private JavaExecAction javaExecHandleBuilder;
private String jar = null;
public JarExec() {
javaExecHandleBuilder = new DefaultJavaExecAction(getFileResolver());
}
@Inject
protected FileResolver getFileResolver() {
throw new UnsupportedOperationException();
}
@TaskAction
public void exec() {
if(this.jar == null) {
throw new RuntimeException("Jar not specified");
}
// tell builder to use -jar as main
javaExecHandleBuilder.setMain("-jar");
setJvmArgs(getJvmArgs()); // from JavaExec. Convention mapping.
// put jar at beginning after -jar
List<String> args = javaExecHandleBuilder.getArgs();
args.add(0,this.jar);
javaExecHandleBuilder.setArgs(args);
javaExecHandleBuilder.execute();
}
public void setJar(String jar) {
this.jar = jar;
}
public String getJar() {
return this.jar;
}
public void jar(String jar) {
this.jar = jar;
}
/**
* {@inheritDoc}
*/
public List<String> getAllJvmArgs() {
return javaExecHandleBuilder.getAllJvmArgs();
}
/**
* {@inheritDoc}
*/
public void setAllJvmArgs(Iterable<?> arguments) {
javaExecHandleBuilder.setAllJvmArgs(arguments);
}
/**
* {@inheritDoc}
*/
public List<String> getJvmArgs() {
return javaExecHandleBuilder.getJvmArgs();
}
/**
* {@inheritDoc}
*/
public void setJvmArgs(Iterable<?> arguments) {
javaExecHandleBuilder.setJvmArgs(arguments);
}
/**
* {@inheritDoc}
*/
public JarExec jvmArgs(Iterable<?> arguments) {
javaExecHandleBuilder.jvmArgs(arguments);
return this;
}
/**
* {@inheritDoc}
*/
public JarExec jvmArgs(Object... arguments) {
javaExecHandleBuilder.jvmArgs(arguments);
return this;
}
/**
* {@inheritDoc}
*/
public Map<String, Object> getSystemProperties() {
return javaExecHandleBuilder.getSystemProperties();
}
/**
* {@inheritDoc}
*/
public void setSystemProperties(Map<String, ?> properties) {
javaExecHandleBuilder.setSystemProperties(properties);
}
/**
* {@inheritDoc}
*/
public JarExec systemProperties(Map<String, ?> properties) {
javaExecHandleBuilder.systemProperties(properties);
return this;
}
/**
* {@inheritDoc}
*/
public JarExec systemProperty(String name, Object value) {
javaExecHandleBuilder.systemProperty(name, value);
return this;
}
/**
* {@inheritDoc}
*/
@InputFiles
public FileCollection getBootstrapClasspath() {
return javaExecHandleBuilder.getBootstrapClasspath();
}
/**
* {@inheritDoc}
*/
public void setBootstrapClasspath(FileCollection classpath) {
javaExecHandleBuilder.setBootstrapClasspath(classpath);
}
/**
* {@inheritDoc}
*/
public JarExec bootstrapClasspath(Object... classpath) {
javaExecHandleBuilder.bootstrapClasspath(classpath);
return this;
}
/**
* {@inheritDoc}
*/
public String getMinHeapSize() {
return javaExecHandleBuilder.getMinHeapSize();
}
/**
* {@inheritDoc}
*/
public void setMinHeapSize(String heapSize) {
javaExecHandleBuilder.setMinHeapSize(heapSize);
}
/**
* {@inheritDoc}
*/
public String getDefaultCharacterEncoding() {
return javaExecHandleBuilder.getDefaultCharacterEncoding();
}
/**
* {@inheritDoc}
*/
public void setDefaultCharacterEncoding(String defaultCharacterEncoding) {
javaExecHandleBuilder.setDefaultCharacterEncoding(defaultCharacterEncoding);
}
/**
* {@inheritDoc}
*/
public String getMaxHeapSize() {
return javaExecHandleBuilder.getMaxHeapSize();
}
/**
* {@inheritDoc}
*/
public void setMaxHeapSize(String heapSize) {
javaExecHandleBuilder.setMaxHeapSize(heapSize);
}
/**
* {@inheritDoc}
*/
public boolean getEnableAssertions() {
return javaExecHandleBuilder.getEnableAssertions();
}
/**
* {@inheritDoc}
*/
public void setEnableAssertions(boolean enabled) {
javaExecHandleBuilder.setEnableAssertions(enabled);
}
/**
* {@inheritDoc}
*/
public boolean getDebug() {
return javaExecHandleBuilder.getDebug();
}
/**
* {@inheritDoc}
*/
@Option(option = "debug-jvm", description = "Enable debugging for the process. The process is started suspended and listening on port 5005. [INCUBATING]")
public void setDebug(boolean enabled) {
javaExecHandleBuilder.setDebug(enabled);
}
/**
* {@inheritDoc}
*/
public List<String> getArgs() {
return javaExecHandleBuilder.getArgs();
}
/**
* {@inheritDoc}
*/
public JarExec setArgs(Iterable<?> applicationArgs) {
javaExecHandleBuilder.setArgs(applicationArgs);
return this;
}
/**
* {@inheritDoc}
*/
public JarExec args(Object... args) {
javaExecHandleBuilder.args(args);
return this;
}
/**
* {@inheritDoc}
*/
public JarExec args(Iterable<?> args) {
javaExecHandleBuilder.args(args);
return this;
}
/**
* {@inheritDoc}
*/
public JarExec setClasspath(FileCollection classpath) {
javaExecHandleBuilder.setClasspath(classpath);
return this;
}
/**
* {@inheritDoc}
*/
public JarExec classpath(Object... paths) {
javaExecHandleBuilder.classpath(paths);
return this;
}
/**
* {@inheritDoc}
*/
@InputFiles
public FileCollection getClasspath() {
return javaExecHandleBuilder.getClasspath();
}
/**
* {@inheritDoc}
*/
public JarExec copyTo(JavaForkOptions options) {
javaExecHandleBuilder.copyTo(options);
return this;
}
/**
* {@inheritDoc}
*/
public String getExecutable() {
return javaExecHandleBuilder.getExecutable();
}
/**
* {@inheritDoc}
*/
public void setExecutable(Object executable) {
javaExecHandleBuilder.setExecutable(executable);
}
/**
* {@inheritDoc}
*/
public JarExec executable(Object executable) {
javaExecHandleBuilder.executable(executable);
return this;
}
/**
* {@inheritDoc}
*/
public File getWorkingDir() {
return javaExecHandleBuilder.getWorkingDir();
}
/**
* {@inheritDoc}
*/
public void setWorkingDir(Object dir) {
javaExecHandleBuilder.setWorkingDir(dir);
}
/**
* {@inheritDoc}
*/
public JarExec workingDir(Object dir) {
javaExecHandleBuilder.workingDir(dir);
return this;
}
/**
* {@inheritDoc}
*/
public Map<String, Object> getEnvironment() {
return javaExecHandleBuilder.getEnvironment();
}
/**
* {@inheritDoc}
*/
public void setEnvironment(Map<String, ?> environmentVariables) {
javaExecHandleBuilder.setEnvironment(environmentVariables);
}
/**
* {@inheritDoc}
*/
public JarExec environment(String name, Object value) {
javaExecHandleBuilder.environment(name, value);
return this;
}
/**
* {@inheritDoc}
*/
public JarExec environment(Map<String, ?> environmentVariables) {
javaExecHandleBuilder.environment(environmentVariables);
return this;
}
/**
* {@inheritDoc}
*/
public JarExec copyTo(ProcessForkOptions target) {
javaExecHandleBuilder.copyTo(target);
return this;
}
/**
* {@inheritDoc}
*/
public JarExec setStandardInput(InputStream inputStream) {
javaExecHandleBuilder.setStandardInput(inputStream);
return this;
}
/**
* {@inheritDoc}
*/
public InputStream getStandardInput() {
return javaExecHandleBuilder.getStandardInput();
}
/**
* {@inheritDoc}
*/
public JarExec setStandardOutput(OutputStream outputStream) {
javaExecHandleBuilder.setStandardOutput(outputStream);
return this;
}
/**
* {@inheritDoc}
*/
public OutputStream getStandardOutput() {
return javaExecHandleBuilder.getStandardOutput();
}
/**
* {@inheritDoc}
*/
public JarExec setErrorOutput(OutputStream outputStream) {
javaExecHandleBuilder.setErrorOutput(outputStream);
return this;
}
/**
* {@inheritDoc}
*/
public OutputStream getErrorOutput() {
return javaExecHandleBuilder.getErrorOutput();
}
/**
* {@inheritDoc}
*/
public JarExec setIgnoreExitValue(boolean ignoreExitValue) {
javaExecHandleBuilder.setIgnoreExitValue(ignoreExitValue);
return this;
}
/**
* {@inheritDoc}
*/
public boolean isIgnoreExitValue() {
return javaExecHandleBuilder.isIgnoreExitValue();
}
/**
* {@inheritDoc}
*/
public List<String> getCommandLine() {
return javaExecHandleBuilder.getCommandLine();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment