aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar Sasha Smundak <asmundak@google.com>2016-08-19 20:14:41 +0000
committerGravatar Yue Gan <yueg@google.com>2016-08-22 08:11:31 +0000
commitc0e420d2cae980f744d63ff5b32f5b5e002fce3b (patch)
treee13f670dac44d4c7047cde2a9c4e56d5b88766b4 /src/main
parente5060fd85892937e8d2b230d4a28334d8bfb4456 (diff)
The target pointed to by the 'singlejar' attribute of the java_toolchain rule is now handled as a native application, unless its path ends with '.jar' (in which case it is a Java application as before).
-- MOS_MIGRATED_REVID=130783627
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java46
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java48
2 files changed, 65 insertions, 29 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java
index 43b567699d..4a91273b75 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java
@@ -233,20 +233,38 @@ public class DeployArchiveBuilder {
ResourceSet resourceSet =
ResourceSet.createWithRamCpuIo(/*memoryMb = */200.0, /*cpuUsage = */.2, /*ioUsage=*/.2);
- ruleContext.registerAction(new SpawnAction.Builder()
- .addInputs(inputs.build())
- .addTransitiveInputs(JavaHelper.getHostJavabaseInputs(ruleContext))
- .addOutput(outputJar)
- .setResources(resourceSet)
- .setJarExecutable(
- ruleContext.getHostConfiguration().getFragment(Jvm.class).getJavaExecutable(),
- getSingleJar(ruleContext),
- jvmArgs)
- .setCommandLine(commandLine)
- .useParameterFile(ParameterFileType.SHELL_QUOTED)
- .setProgressMessage("Building deploy jar " + outputJar.prettyPrint())
- .setMnemonic("JavaDeployJar")
- .build(ruleContext));
+ // If singlejar's name ends with .jar, it is Java application, otherwise it is native.
+ // TODO(asmundak): once b/28640279 is fixed (that is, the native singlejar is released),
+ // eliminate this check, allowing only native singlejar.
+ Artifact singlejar = getSingleJar(ruleContext);
+ if (singlejar.getFilename().endsWith(".jar")) {
+ ruleContext.registerAction(new SpawnAction.Builder()
+ .addInputs(inputs.build())
+ .addTransitiveInputs(JavaHelper.getHostJavabaseInputs(ruleContext))
+ .addOutput(outputJar)
+ .setResources(resourceSet)
+ .setJarExecutable(
+ ruleContext.getHostConfiguration().getFragment(Jvm.class).getJavaExecutable(),
+ singlejar,
+ jvmArgs)
+ .setCommandLine(commandLine)
+ .useParameterFile(ParameterFileType.SHELL_QUOTED)
+ .setProgressMessage("Building deploy jar " + outputJar.prettyPrint())
+ .setMnemonic("JavaDeployJar")
+ .build(ruleContext));
+ } else {
+ ruleContext.registerAction(new SpawnAction.Builder()
+ .addInputs(inputs.build())
+ .addTransitiveInputs(JavaHelper.getHostJavabaseInputs(ruleContext))
+ .addOutput(outputJar)
+ .setResources(resourceSet)
+ .setExecutable(singlejar)
+ .setCommandLine(commandLine)
+ .useParameterFile(ParameterFileType.SHELL_QUOTED)
+ .setProgressMessage("Building deploy jar " + outputJar.prettyPrint())
+ .setMnemonic("JavaDeployJar")
+ .build(ruleContext));
+ }
}
/** Returns the SingleJar deploy jar Artifact. */
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java
index 69544f3931..4948febeaf 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java
@@ -55,21 +55,39 @@ public final class SingleJarActionBuilder {
ruleContext.getHostConfiguration().getFragment(Jvm.class).getJavaExecutable();
NestedSet<Artifact> hostJavabaseInputs = JavaHelper.getHostJavabaseInputs(ruleContext);
Artifact singleJar = getSingleJar(ruleContext);
- ruleContext.registerAction(
- new SpawnAction.Builder()
- .addOutput(outputJar)
- .addInputs(resources.values())
- .addInputs(resourceJars)
- .addTransitiveInputs(hostJavabaseInputs)
- .setJarExecutable(
- javaPath,
- singleJar,
- JavaToolchainProvider.fromRuleContext(ruleContext).getJvmOptions())
- .setCommandLine(sourceJarCommandLine(outputJar, resources, resourceJars))
- .useParameterFile(ParameterFileType.SHELL_QUOTED)
- .setProgressMessage("Building source jar " + outputJar.prettyPrint())
- .setMnemonic("JavaSourceJar")
- .build(ruleContext));
+ // If singlejar's name ends with .jar, it is Java application, otherwise it is native.
+ // TODO(asmundak): once b/28640279 is fixed (that is, the native singlejar is released),
+ // eliminate this check, allowing only native singlejar.
+ if (singleJar.getFilename().endsWith(".jar")) {
+ ruleContext.registerAction(
+ new SpawnAction.Builder()
+ .addOutput(outputJar)
+ .addInputs(resources.values())
+ .addInputs(resourceJars)
+ .addTransitiveInputs(hostJavabaseInputs)
+ .setJarExecutable(
+ javaPath,
+ singleJar,
+ JavaToolchainProvider.fromRuleContext(ruleContext).getJvmOptions())
+ .setCommandLine(sourceJarCommandLine(outputJar, resources, resourceJars))
+ .useParameterFile(ParameterFileType.SHELL_QUOTED)
+ .setProgressMessage("Building source jar " + outputJar.prettyPrint())
+ .setMnemonic("JavaSourceJar")
+ .build(ruleContext));
+ } else {
+ ruleContext.registerAction(
+ new SpawnAction.Builder()
+ .addOutput(outputJar)
+ .addInputs(resources.values())
+ .addInputs(resourceJars)
+ .addTransitiveInputs(hostJavabaseInputs)
+ .setExecutable(singleJar)
+ .setCommandLine(sourceJarCommandLine(outputJar, resources, resourceJars))
+ .useParameterFile(ParameterFileType.SHELL_QUOTED)
+ .setProgressMessage("Building source jar " + outputJar.prettyPrint())
+ .setMnemonic("JavaSourceJar")
+ .build(ruleContext));
+ }
}
/** Returns the SingleJar deploy jar Artifact. */