Enhancing OnosJar to build OSGi jars and wars if required.
Also, simplifying onos.bucklet by using the rule
Change-Id: If89633db2d83cbfc56a8e70d2bea665ffaf186ff
diff --git a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarDescription.java b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarDescription.java
index 7632ade..dff37c0 100644
--- a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarDescription.java
+++ b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarDescription.java
@@ -19,13 +19,21 @@
import com.facebook.buck.jvm.java.CalculateAbi;
import com.facebook.buck.jvm.java.DefaultJavaLibrary;
import com.facebook.buck.jvm.java.JavaBuckConfig;
+import com.facebook.buck.jvm.java.JavaLibrary;
import com.facebook.buck.jvm.java.JavaLibraryDescription;
import com.facebook.buck.jvm.java.JavaOptions;
+import com.facebook.buck.jvm.java.JavaSourceJar;
import com.facebook.buck.jvm.java.JavacOptions;
import com.facebook.buck.jvm.java.JavacOptionsAmender;
import com.facebook.buck.jvm.java.JavacOptionsFactory;
+import com.facebook.buck.jvm.java.JavacToJarStepFactory;
+import com.facebook.buck.jvm.java.JavadocJar;
+import com.facebook.buck.jvm.java.MavenUberJar;
+import com.facebook.buck.maven.AetherUtil;
import com.facebook.buck.model.BuildTarget;
import com.facebook.buck.model.Flavor;
+import com.facebook.buck.model.Flavored;
+import com.facebook.buck.model.ImmutableFlavor;
import com.facebook.buck.parser.NoSuchBuildTargetException;
import com.facebook.buck.rules.BuildRule;
import com.facebook.buck.rules.BuildRuleParams;
@@ -37,7 +45,9 @@
import com.facebook.buck.rules.SourcePathResolver;
import com.facebook.buck.rules.SourcePaths;
import com.facebook.buck.rules.TargetGraph;
+import com.google.common.base.Function;
import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSortedSet;
import com.google.common.collect.Iterables;
@@ -51,8 +61,16 @@
*
* Currently, this only does Swagger generation.
*/
-public class OnosJarDescription implements Description<OnosJarDescription.Arg> {
+public class OnosJarDescription implements Description<OnosJarDescription.Arg>, Flavored {
public static final BuildRuleType TYPE = BuildRuleType.of("onos_jar");
+ public static final Flavor NON_OSGI_JAR = ImmutableFlavor.of("non-osgi");
+
+ public static final ImmutableSet<Flavor> SUPPORTED_FLAVORS = ImmutableSet.of(
+ JavaLibrary.SRC_JAR,
+ JavaLibrary.MAVEN_JAR,
+ JavaLibrary.JAVADOC_JAR,
+ NON_OSGI_JAR);
+
private final JavacOptions defaultJavacOptions;
private final JavaOptions defaultJavaOptions;
@@ -89,6 +107,63 @@
ImmutableSortedSet<Flavor> flavors = target.getFlavors();
BuildRuleParams paramsWithMavenFlavor = null;
+ if (flavors.contains(JavaLibrary.MAVEN_JAR)) {
+ paramsWithMavenFlavor = params;
+
+ // Maven rules will depend upon their vanilla versions, so the latter have to be constructed
+ // without the maven flavor to prevent output-path conflict
+ params = params.copyWithBuildTarget(
+ params.getBuildTarget().withoutFlavors(ImmutableSet.of(JavaLibrary.MAVEN_JAR)));
+ }
+
+ if (flavors.contains(JavaLibrary.SRC_JAR)) {
+ args.mavenCoords = args.mavenCoords.transform(
+ new Function<String, String>() {
+ @Override
+ public String apply(String input) {
+ return AetherUtil.addClassifier(input, AetherUtil.CLASSIFIER_SOURCES);
+ }
+ });
+
+ if (!flavors.contains(JavaLibrary.MAVEN_JAR)) {
+ return new JavaSourceJar(
+ params,
+ pathResolver,
+ args.srcs.get(),
+ args.mavenCoords);
+ } else {
+ return MavenUberJar.SourceJar.create(
+ Preconditions.checkNotNull(paramsWithMavenFlavor),
+ pathResolver,
+ args.srcs.get(),
+ args.mavenCoords);
+ }
+ }
+
+ if (flavors.contains(JavaLibrary.JAVADOC_JAR)) {
+ args.mavenCoords = args.mavenCoords.transform(
+ new Function<String, String>() {
+ @Override
+ public String apply(String input) {
+ return AetherUtil.addClassifier(input, AetherUtil.CLASSIFIER_JAVADOC);
+ }
+ });
+
+ if (!flavors.contains(JavaLibrary.MAVEN_JAR)) {
+ return new JavadocJar(
+ params,
+ pathResolver,
+ args.srcs.get(),
+ args.mavenCoords);
+ } else {
+ return MavenUberJar.MavenJavadocJar.create(
+ Preconditions.checkNotNull(paramsWithMavenFlavor),
+ pathResolver,
+ args.srcs.get(),
+ args.mavenCoords);
+ }
+ }
+
JavacOptions javacOptions = JavacOptionsFactory.create(
defaultJavacOptions,
params,
@@ -101,45 +176,84 @@
ImmutableSortedSet<BuildRule> exportedDeps = resolver.getAllRules(args.exportedDeps.get());
- DefaultJavaLibrary defaultJavaLibrary =
- resolver.addToIndex(
- new OnosJar(
- params.appendExtraDeps(
- Iterables.concat(
- BuildRules.getExportedRules(
- Iterables.concat(
- params.getDeclaredDeps().get(),
- exportedDeps,
- resolver.getAllRules(args.providedDeps.get()))),
- pathResolver.filterBuildRuleInputs(
- javacOptions.getInputs(pathResolver)))),
- pathResolver,
- args.srcs.get(),
- validateResources(
- pathResolver,
- params.getProjectFilesystem(),
- args.resources.get()),
- javacOptions.getGeneratedSourceFolderName(),
- args.proguardConfig.transform(
- SourcePaths.toSourcePath(params.getProjectFilesystem())),
- args.postprocessClassesCommands.get(), // FIXME this should be forbidden
- exportedDeps,
- resolver.getAllRules(args.providedDeps.get()),
- new BuildTargetSourcePath(abiJarTarget),
- javacOptions.trackClassUsage(),
+ final DefaultJavaLibrary defaultJavaLibrary;
+ if (!flavors.contains(NON_OSGI_JAR)) {
+ defaultJavaLibrary =
+ resolver.addToIndex(
+ new OnosJar(
+ params.appendExtraDeps(
+ Iterables.concat(
+ BuildRules.getExportedRules(
+ Iterables.concat(
+ params.getDeclaredDeps().get(),
+ exportedDeps,
+ resolver.getAllRules(args.providedDeps.get()))),
+ pathResolver.filterBuildRuleInputs(
+ javacOptions.getInputs(pathResolver)))),
+ pathResolver,
+ args.srcs.get(),
+ validateResources(
+ pathResolver,
+ params.getProjectFilesystem(),
+ args.resources.get()),
+ javacOptions.getGeneratedSourceFolderName(),
+ args.proguardConfig.transform(
+ SourcePaths.toSourcePath(params.getProjectFilesystem())),
+ args.postprocessClassesCommands.get(), // FIXME this should be forbidden
+ exportedDeps,
+ resolver.getAllRules(args.providedDeps.get()),
+ new BuildTargetSourcePath(abiJarTarget),
+ javacOptions.trackClassUsage(),
/* additionalClasspathEntries */ ImmutableSet.<Path>of(),
- new OnosJarStepFactory(javacOptions, JavacOptionsAmender.IDENTITY,
- args.webContext, args.apiTitle, args.apiVersion,
- args.apiPackage, args.apiDescription, args.resources),
- args.resourcesRoot,
- args.mavenCoords,
- args.tests.get(),
- javacOptions.getClassesToRemoveFromJar(),
- args.webContext,
- args.apiTitle,
- args.apiVersion,
- args.apiPackage,
- args.apiDescription));
+ new OnosJarStepFactory(javacOptions, JavacOptionsAmender.IDENTITY,
+ args.webContext, args.apiTitle, args.apiVersion,
+ args.apiPackage, args.apiDescription, args.resources,
+ args.groupId, args.bundleName, args.bundleVersion,
+ args.bundleLicense, args.bundleDescription, args.importPackages,
+ args.exportPackages, args.includeResources, args.dynamicimportPackages),
+ args.resourcesRoot,
+ args.mavenCoords,
+ args.tests.get(),
+ javacOptions.getClassesToRemoveFromJar(),
+ args.webContext,
+ args.apiTitle,
+ args.apiVersion,
+ args.apiPackage,
+ args.apiDescription));
+ } else {
+ defaultJavaLibrary =
+ resolver.addToIndex(
+ new DefaultJavaLibrary(
+ params.appendExtraDeps(
+ Iterables.concat(
+ BuildRules.getExportedRules(
+ Iterables.concat(
+ params.getDeclaredDeps().get(),
+ exportedDeps,
+ resolver.getAllRules(args.providedDeps.get()))),
+ pathResolver.filterBuildRuleInputs(
+ javacOptions.getInputs(pathResolver)))),
+ pathResolver,
+ args.srcs.get(),
+ validateResources(
+ pathResolver,
+ params.getProjectFilesystem(),
+ args.resources.get()),
+ javacOptions.getGeneratedSourceFolderName(),
+ args.proguardConfig.transform(
+ SourcePaths.toSourcePath(params.getProjectFilesystem())),
+ args.postprocessClassesCommands.get(),
+ exportedDeps,
+ resolver.getAllRules(args.providedDeps.get()),
+ new BuildTargetSourcePath(abiJarTarget),
+ javacOptions.trackClassUsage(),
+ /* additionalClasspathEntries */ ImmutableSet.<Path>of(),
+ new JavacToJarStepFactory(javacOptions, JavacOptionsAmender.IDENTITY),
+ args.resourcesRoot,
+ args.mavenCoords,
+ args.tests.get(),
+ javacOptions.getClassesToRemoveFromJar()));
+ }
resolver.addToIndex(
CalculateAbi.of(
@@ -151,6 +265,10 @@
return defaultJavaLibrary;
}
+ @Override
+ public boolean hasFlavors(ImmutableSet<Flavor> flavors) {
+ return SUPPORTED_FLAVORS.containsAll(flavors);
+ }
public static class Arg extends JavaLibraryDescription.Arg {
public Optional<String> webContext;
@@ -158,5 +276,16 @@
public Optional<String> apiVersion;
public Optional<String> apiPackage;
public Optional<String> apiDescription;
+
+ public Optional<String> groupId;
+ public Optional<String> bundleName;
+ public Optional<String> bundleVersion;
+ public Optional<String> bundleLicense;
+ public Optional<String> bundleDescription;
+
+ public Optional<String> importPackages;
+ public Optional<String> exportPackages;
+ public Optional<String> includeResources;
+ public Optional<String> dynamicimportPackages;
}
}
\ No newline at end of file