コード例 #1
0
 def test_jar_dependencies(self):
   lib = JarLibrary(name='foo', address=Address.parse('//:foo'),
                    build_graph=self.build_graph,
                    jars=[jar1, jar2])
   self.assertEquals((jar1, jar2), lib.jar_dependencies)
コード例 #2
0
    def get_alternate_target_roots(cls, options, address_mapper, build_graph):
        processed = set()
        for jvm_tool in JvmToolMixin.get_registered_tools():
            dep_spec = jvm_tool.dep_spec(options)
            dep_address = Address.parse(dep_spec)
            # Some JVM tools are requested multiple times, we only need to handle them once.
            if dep_address not in processed:
                processed.add(dep_address)
                try:
                    if build_graph.resolve_address(dep_address):
                        # The user has defined a tool classpath override - we let that stand.
                        continue
                except AddressLookupError as e:
                    if jvm_tool.classpath is None:
                        raise cls._tool_resolve_error(e, dep_spec, jvm_tool)
                    else:
                        if not jvm_tool.is_default(options):
                            # The user specified a target spec for this jvm tool that doesn't actually exist.
                            # We want to error out here instead of just silently using the default option while
                            # appearing to respect their config.
                            raise cls.ToolResolveError(
                                dedent("""
                  Failed to resolve target for tool: {tool}. This target was obtained from
                  option {option} in scope {scope}.

                  Make sure you didn't make a typo in the tool's address. You specified that the
                  tool should use the target found at "{tool}".

                  This target has a default classpath configured, so you can simply remove:
                    [{scope}]
                    {option}: {tool}
                  from pants.ini (or any other config file) to use the default tool.

                  The default classpath is: {default_classpath}

                  Note that tool target addresses in pants.ini should be specified *without* quotes.
                """).strip().format(tool=dep_spec,
                                    option=jvm_tool.key,
                                    scope=jvm_tool.scope,
                                    default_classpath=':'.join(
                                        map(str, jvm_tool.classpath or ()))))
                        if jvm_tool.classpath:
                            tool_classpath_target = JarLibrary(
                                name=dep_address.target_name,
                                address=dep_address,
                                build_graph=build_graph,
                                jars=jvm_tool.classpath)
                        else:
                            # The tool classpath is empty by default, so we just inject a dummy target that
                            # ivy resolves as the empty list classpath.  JarLibrary won't do since it requires
                            # one or more jars, so we just pick a target type ivy has no resolve work to do for.
                            tool_classpath_target = Target(
                                name=dep_address.target_name,
                                address=dep_address,
                                build_graph=build_graph)
                        build_graph.inject_target(tool_classpath_target,
                                                  synthetic=True)

        # We use the trick of not returning alternate roots, but instead just filling the dep_spec
        # holes with a JarLibrary built from a tool's default classpath JarDependency list if there is
        # no over-riding targets present. This means we do modify the build_graph, but we at least do
        # it at a time in the engine lifecycle cut out for handling that.
        return None
コード例 #3
0
 def test_validation(self):
   target = Target(name='mybird', address=Address.parse('//:mybird'),
                   build_graph=self.build_graph)
   # jars attribute must contain only JarLibrary instances
   with self.assertRaises(TargetDefinitionException):
     JarLibrary(name="test", jars=[target])
コード例 #4
0
 def test_excludes(self):
   # TODO(Eric Ayers) There doesn't seem to be any way to set this field at the moment.
   lib = JarLibrary(name='foo', address=SyntheticAddress.parse('//:foo'),
                    build_graph=self.build_graph)
   self.assertEquals([], lib.excludes)