use of com.facebook.buck.rules.TargetGraph in project buck by facebook.
the class JarShapeTest method shouldBeAbleToCreateAMavenJar.
@Test
public void shouldBeAbleToCreateAMavenJar() throws NoSuchBuildTargetException {
TargetNode<?, ?> depNode = JavaLibraryBuilder.createBuilder("//:dep").addSrc(new FakeSourcePath("SomeFile.java")).build();
TargetNode<?, ?> mavenDepNode = JavaLibraryBuilder.createBuilder("//:maven-dep").addSrc(new FakeSourcePath("SomeFile.java")).setMavenCoords("com.example:somelib:1.0").build();
TargetNode<?, ?> libNode = JavaLibraryBuilder.createBuilder("//:lib").addSrc(new FakeSourcePath("Library.java")).addDep(depNode.getBuildTarget()).addDep(mavenDepNode.getBuildTarget()).build();
TargetGraph targetGraph = TargetGraphFactory.newInstance(depNode, mavenDepNode, libNode);
BuildRuleResolver resolver = new BuildRuleResolver(targetGraph, new DefaultTargetNodeToBuildRuleTransformer());
BuildRule dep = resolver.requireRule(depNode.getBuildTarget());
BuildRule mavenDep = resolver.requireRule(mavenDepNode.getBuildTarget());
BuildRule lib = resolver.requireRule(libNode.getBuildTarget());
JarShape.Summary deps = JarShape.MAVEN.gatherDeps(lib);
assertEquals(ImmutableSortedSet.of(dep, lib), deps.getPackagedRules());
assertEquals(ImmutableSet.of(dep, lib, mavenDep), deps.getClasspath());
assertEquals(ImmutableSet.of(mavenDep), deps.getMavenDeps());
}
use of com.facebook.buck.rules.TargetGraph in project buck by facebook.
the class JavaBinaryTest method testGetExecutableCommand.
@Test
public void testGetExecutableCommand() throws Exception {
// prebuilt_jar //third_party/generator:generator
PrebuiltJarBuilder.createBuilder(BuildTargetFactory.newInstance("//third_party/generator:generator")).setBinaryJar(PATH_TO_GENERATOR_JAR).build();
// prebuilt_jar //third_party/guava:guava
TargetNode<?, ?> guavaNode = PrebuiltJarBuilder.createBuilder(BuildTargetFactory.newInstance("//third_party/guava:guava")).setBinaryJar(PATH_TO_GUAVA_JAR).build();
// java_library //java/com/facebook/base:base
TargetNode<?, ?> libraryNode = JavaLibraryBuilder.createBuilder(BuildTargetFactory.newInstance("//java/com/facebook/base:base")).addSrc(Paths.get("java/com/facebook/base/Base.java")).addDep(guavaNode.getBuildTarget()).build();
TargetGraph targetGraph = TargetGraphFactory.newInstance(guavaNode, libraryNode);
BuildRuleResolver ruleResolver = new BuildRuleResolver(targetGraph, new DefaultTargetNodeToBuildRuleTransformer());
SourcePathResolver pathResolver = new SourcePathResolver(new SourcePathRuleFinder(ruleResolver));
BuildRule libraryRule = ruleResolver.requireRule(libraryNode.getBuildTarget());
BuildRuleParams params = new FakeBuildRuleParamsBuilder(BuildTargetFactory.newInstance("//java/com/facebook/base:Main")).setDeclaredDeps(ImmutableSortedSet.of(libraryRule)).build();
// java_binary //java/com/facebook/base:Main
JavaBinary javaBinary = ruleResolver.addToIndex(new JavaBinary(params, new ExternalJavaRuntimeLauncher("/foobar/java"), "com.facebook.base.Main", null, /* merge manifests */
true, null, /* blacklist */
ImmutableSet.of(), ImmutableSet.of(), ImmutableSet.of(), /* cache */
true));
// Strip the trailing "." from the absolute path to the current directory.
final String basePath = new File(".").getAbsolutePath().replaceFirst("\\.$", "");
// Each classpath entry is specified via its absolute path so that the executable command can be
// run from a /tmp directory, if necessary.
String expectedClasspath = basePath + pathResolver.getRelativePath(javaBinary.getSourcePathToOutput());
List<String> expectedCommand = ImmutableList.of("/foobar/java", "-jar", expectedClasspath);
assertEquals(expectedCommand, javaBinary.getExecutableCommand().getCommandPrefix(pathResolver));
assertFalse("Library rules that are used exclusively by genrules should not be part of the classpath.", expectedClasspath.contains(PATH_TO_GENERATOR_JAR.toString()));
}
use of com.facebook.buck.rules.TargetGraph in project buck by facebook.
the class JavaLibraryClasspathProviderTest method getTransitiveClasspathDeps.
@Test
public void getTransitiveClasspathDeps() throws Exception {
TargetNode<?, ?> noOutputNode = makeRule("//no:output", ImmutableSet.of(), ImmutableSet.of(zNode), filesystem);
TargetGraph targetGraph = TargetGraphFactory.newInstance(aNode, bNode, cNode, dNode, eNode, zNode, noOutputNode);
BuildRuleResolver ruleResolver = new BuildRuleResolver(targetGraph, new DefaultTargetNodeToBuildRuleTransformer());
JavaLibrary noOutput = (JavaLibrary) ruleResolver.requireRule(noOutputNode.getBuildTarget());
assertEquals("root does not appear if output jar not present.", ImmutableSet.of(c, e, z), JavaLibraryClasspathProvider.getTransitiveClasspathDeps(noOutput));
assertEquals("root does appear if output jar present.", ImmutableSet.of(z, c, e), JavaLibraryClasspathProvider.getTransitiveClasspathDeps((JavaLibrary) z));
BuildRule mavenCoord = new JavaLibraryBuilder(BuildTargetFactory.newInstance("//has:output"), filesystem, HashCode.fromString("aaaa")).setMavenCoords("com.example:buck:1.0").addDep(z.getBuildTarget()).build(ruleResolver);
assertEquals("Does appear if no output jar but maven coordinate present.", ImmutableSet.of(z, c, e, mavenCoord), JavaLibraryClasspathProvider.getTransitiveClasspathDeps((JavaLibrary) mavenCoord));
}
use of com.facebook.buck.rules.TargetGraph in project buck by facebook.
the class MavenUberJarTest method onlyJavaDepsIncluded.
@Test
public void onlyJavaDepsIncluded() throws NoSuchBuildTargetException {
BuildTarget pythonTarget = BuildTargetFactory.newInstance("//:python");
BuildTarget javaTarget = BuildTargetFactory.newInstance("//:java");
PythonLibraryBuilder pythonLibraryBuilder = PythonLibraryBuilder.createBuilder(pythonTarget);
JavaLibraryBuilder javaLibraryBuilder = JavaLibraryBuilder.createBuilder(javaTarget).addResource(new DefaultBuildTargetSourcePath(pythonTarget));
TargetGraph targetGraph = TargetGraphFactory.newInstance(pythonLibraryBuilder.build(), javaLibraryBuilder.build());
BuildRuleResolver resolver = new BuildRuleResolver(targetGraph, new DefaultTargetNodeToBuildRuleTransformer());
PythonLibrary pythonLibrary = pythonLibraryBuilder.build(resolver, filesystem, targetGraph);
JavaLibrary javaLibrary = javaLibraryBuilder.build(resolver, filesystem, targetGraph);
MavenUberJar buildRule = MavenUberJar.create(javaLibrary, javaLibraryBuilder.createBuildRuleParams(resolver, filesystem), Optional.of("com.facebook.buck.jvm.java:java:jar:42"), Optional.empty());
assertThat(buildRule.getDeps(), Matchers.not(Matchers.hasItem(pythonLibrary)));
}
use of com.facebook.buck.rules.TargetGraph in project buck by facebook.
the class ProjectTest method createActionGraphForTesting.
/**
* Creates an ActionGraph with two android_binary rules, each of which depends on the same
* android_library. The difference between the two is that one lists Guava in its no_dx list and
* the other does not.
* <p>
* The ActionGraph also includes three project_config rules: one for the android_library, and one
* for each of the android_binary rules.
*/
public Pair<ProjectWithModules, BuildRuleResolver> createActionGraphForTesting(@Nullable JavaPackageFinder javaPackageFinder) throws Exception {
ImmutableSet.Builder<TargetNode<?, ?>> nodes = ImmutableSet.builder();
// prebuilt_jar //third_party/guava:guava
TargetNode<?, ?> guavaNode = PrebuiltJarBuilder.createBuilder(BuildTargetFactory.newInstance("//third_party/guava:guava")).setBinaryJar(PATH_TO_GUAVA_JAR).build();
nodes.add(guavaNode);
// android_resouce android_res/base:res
TargetNode<?, ?> androidResNode = AndroidResourceBuilder.createBuilder(BuildTargetFactory.newInstance("//android_res/base:res")).setRes(new FakeSourcePath("android_res/base/res")).setRDotJavaPackage("com.facebook").build();
nodes.add(androidResNode);
// project_config android_res/base:res
TargetNode<?, ?> projectConfigForResourceNode = ProjectConfigBuilder.createBuilder(BuildTargetFactory.newInstance("//android_res/base:project_config")).setSrcRule(androidResNode.getBuildTarget()).setSrcRoots(ImmutableList.of("res")).build();
nodes.add(projectConfigForResourceNode);
// java_library //java/src/com/facebook/grandchild:grandchild
BuildTarget grandchildTarget = BuildTargetFactory.newInstance("//java/src/com/facebook/grandchild:grandchild");
TargetNode<?, ?> grandchildNode = JavaLibraryBuilder.createBuilder(grandchildTarget).addSrc(Paths.get("Grandchild.java")).build();
nodes.add(grandchildNode);
// java_library //java/src/com/facebook/child:child
TargetNode<?, ?> childNode = JavaLibraryBuilder.createBuilder(BuildTargetFactory.newInstance("//java/src/com/facebook/child:child")).addSrc(Paths.get("Child.java")).addDep(grandchildNode.getBuildTarget()).build();
nodes.add(childNode);
// java_library //java/src/com/facebook/exportlib:exportlib
TargetNode<?, ?> exportLibNode = JavaLibraryBuilder.createBuilder(BuildTargetFactory.newInstance("//java/src/com/facebook/exportlib:exportlib")).addSrc(Paths.get("ExportLib.java")).addDep(guavaNode.getBuildTarget()).addExportedDep(guavaNode.getBuildTarget()).build();
nodes.add(exportLibNode);
// android_library //java/src/com/facebook/base:base
TargetNode<?, ?> baseNode = AndroidLibraryBuilder.createBuilder(BuildTargetFactory.newInstance("//java/src/com/facebook/base:base")).addSrc(Paths.get("Base.java")).addDep(exportLibNode.getBuildTarget()).addDep(childNode.getBuildTarget()).addDep(androidResNode.getBuildTarget()).build();
nodes.add(baseNode);
// project_config //java/src/com/facebook/base:project_config
TargetNode<?, ?> projectConfigForLibraryNode = ProjectConfigBuilder.createBuilder(BuildTargetFactory.newInstance("//java/src/com/facebook/base:project_config")).setSrcRule(baseNode.getBuildTarget()).setSrcRoots(ImmutableList.of("src", "src-gen")).build();
nodes.add(projectConfigForLibraryNode);
TargetNode<?, ?> projectConfigForExportLibraryNode = ProjectConfigBuilder.createBuilder(BuildTargetFactory.newInstance("//java/src/com/facebook/exportlib:project_config")).setSrcRule(exportLibNode.getBuildTarget()).setSrcRoots(ImmutableList.of("src")).build();
nodes.add(projectConfigForExportLibraryNode);
// keystore //keystore:debug
BuildTarget keystoreTarget = BuildTargetFactory.newInstance("//keystore:debug");
TargetNode<?, ?> keystoreNode = KeystoreBuilder.createBuilder(keystoreTarget).setStore(new FakeSourcePath("keystore/debug.keystore")).setProperties(new FakeSourcePath("keystore/debug.keystore.properties")).build();
nodes.add(keystoreNode);
// android_binary //foo:app
ImmutableSortedSet<BuildTarget> androidBinaryRuleDepsTarget = ImmutableSortedSet.of(baseNode.getBuildTarget());
TargetNode<?, ?> androidBinaryNode = AndroidBinaryBuilder.createBuilder(BuildTargetFactory.newInstance("//foo:app")).setOriginalDeps(androidBinaryRuleDepsTarget).setManifest(new FakeSourcePath("foo/AndroidManifest.xml")).setKeystore(keystoreNode.getBuildTarget()).setBuildTargetsToExcludeFromDex(ImmutableSet.of(BuildTargetFactory.newInstance("//third_party/guava:guava"))).build();
nodes.add(androidBinaryNode);
// project_config //foo:project_config
TargetNode<?, ?> projectConfigUsingNoDxNode = ProjectConfigBuilder.createBuilder(BuildTargetFactory.newInstance("//foo:project_config")).setSrcRule(androidBinaryNode.getBuildTarget()).build();
nodes.add(projectConfigUsingNoDxNode);
// android_binary //bar:app
ImmutableSortedSet<BuildTarget> barAppBuildRuleDepsTarget = ImmutableSortedSet.of(baseNode.getBuildTarget());
TargetNode<?, ?> barAppBuildNode = AndroidBinaryBuilder.createBuilder(BuildTargetFactory.newInstance("//bar:app")).setOriginalDeps(barAppBuildRuleDepsTarget).setManifest(new FakeSourcePath("foo/AndroidManifest.xml")).setKeystore(keystoreNode.getBuildTarget()).build();
nodes.add(barAppBuildNode);
// project_config //bar:project_config
TargetNode<?, ?> projectConfigNode = ProjectConfigBuilder.createBuilder(BuildTargetFactory.newInstance("//bar:project_config")).setSrcRule(barAppBuildNode.getBuildTarget()).build();
nodes.add(projectConfigNode);
TargetGraph targetGraph = TargetGraphFactory.newInstance(nodes.build());
BuildRuleResolver ruleResolver = new BuildRuleResolver(targetGraph, new DefaultTargetNodeToBuildRuleTransformer());
guava = ruleResolver.requireRule(guavaNode.getBuildTarget());
ProjectConfig projectConfigForExportLibrary = (ProjectConfig) ruleResolver.requireRule(projectConfigForExportLibraryNode.getBuildTarget());
ProjectConfig projectConfigForLibrary = (ProjectConfig) ruleResolver.requireRule(projectConfigForLibraryNode.getBuildTarget());
ProjectConfig projectConfigForResource = (ProjectConfig) ruleResolver.requireRule(projectConfigForResourceNode.getBuildTarget());
ProjectConfig projectConfigUsingNoDx = (ProjectConfig) ruleResolver.requireRule(projectConfigUsingNoDxNode.getBuildTarget());
ProjectConfig projectConfig = (ProjectConfig) ruleResolver.requireRule(projectConfigNode.getBuildTarget());
return new Pair<>(getModulesForActionGraph(ruleResolver, ImmutableSortedSet.of(projectConfigForExportLibrary, projectConfigForLibrary, projectConfigForResource, projectConfigUsingNoDx, projectConfig), javaPackageFinder, null), ruleResolver);
}
Aggregations