Example usage for org.apache.maven.model.building ModelSource getLocation

List of usage examples for org.apache.maven.model.building ModelSource getLocation

Introduction

In this page you can find the example usage for org.apache.maven.model.building ModelSource getLocation.

Prototype

String getLocation();

Source Link

Document

Provides a user-friendly hint about the location of the source.

Usage

From source file:com.google.devtools.build.workspace.maven.DefaultModelResolver.java

License:Open Source License

public Model getEffectiveModel(ModelSource modelSource, EventHandler handler) {
    DefaultModelBuildingRequest request = new DefaultModelBuildingRequest();
    request.setModelResolver(this);
    request.setModelSource(modelSource);
    Model model;//from www  . ja v a2  s .co m
    try {
        ModelBuildingResult result = modelBuilder.build(request);
        model = result.getEffectiveModel();
    } catch (ModelBuildingException | IllegalArgumentException e) {
        // IllegalArg can be thrown if the parent POM cannot be resolved.
        handler.handle(Event.error(
                "Unable to resolve Maven model from " + modelSource.getLocation() + ": " + e.getMessage()));
        return null;
    }
    return model;
}

From source file:com.google.devtools.build.workspace.maven.Resolver.java

License:Open Source License

/**
 * Resolves all dependencies from a given "model source," which could be either a URL or a local
 * file.// w  ww .  j a  v a 2  s.c o  m
 * @return the model.
 */
@Nullable
public Model resolveEffectiveModel(ModelSource modelSource, Set<String> exclusions, Rule parent) {
    Model model = modelResolver.getEffectiveModel(modelSource, handler);
    if (model == null) {
        return null;
    }
    for (Repository repo : model.getRepositories()) {
        modelResolver.addRepository(repo);
    }

    for (Dependency dependency : model.getDependencies()) {
        if (!dependency.getScope().equals(COMPILE_SCOPE)) {
            continue;
        }
        if (dependency.isOptional()) {
            continue;
        }
        if (exclusions.contains(dependency.getGroupId() + ":" + dependency.getArtifactId())) {
            continue;
        }
        try {
            Rule artifactRule = new Rule(getArtifact(dependency), dependency.getExclusions());
            HashSet<String> localDepExclusions = new HashSet<>(exclusions);
            localDepExclusions.addAll(artifactRule.getExclusions());

            boolean isNewDependency = addArtifact(artifactRule, model.toString());
            if (isNewDependency) {
                ModelSource depModelSource = modelResolver.resolveModel(dependency.getGroupId(),
                        dependency.getArtifactId(), dependency.getVersion());
                if (depModelSource != null) {
                    artifactRule.setRepository(depModelSource.getLocation(), handler);
                    artifactRule.setSha1(downloadSha1(artifactRule));
                    resolveEffectiveModel(depModelSource, localDepExclusions, artifactRule);
                } else {
                    handler.handle(Event.error("Could not get a model for " + dependency));
                }
            }

            if (parent != null) {
                parent.addDependency(artifactRule);
                parent.getDependencies().addAll(artifactRule.getDependencies());
            } else {
                addArtifact(artifactRule, modelSource.getLocation());
            }
        } catch (UnresolvableModelException | InvalidArtifactCoordinateException e) {
            handler.handle(Event.error("Could not resolve dependency " + dependency.getGroupId() + ":"
                    + dependency.getArtifactId() + ":" + dependency.getVersion() + ": " + e.getMessage()));
        }
    }
    return model;
}

From source file:com.google.devtools.build.workspace.WorkspaceResolver.java

License:Open Source License

/**
 * Calculates transitive dependencies of the given //external package.
 *//* ww w . j  a  v a 2  s .  co  m*/
public void resolveTransitiveDependencies(Package externalPackage) {
    Location location = Location.fromFile(externalPackage.getFilename());
    for (Target target : externalPackage.getTargets()) {
        // Targets are //external:foo.
        if (target.getTargetKind().startsWith("maven_jar ")) {
            RepositoryName repositoryName;
            try {
                repositoryName = RepositoryName.create("@" + target.getName());
            } catch (LabelSyntaxException e) {
                handler.handle(
                        Event.error(location, "Invalid repository name for " + target + ": " + e.getMessage()));
                return;
            }
            com.google.devtools.build.lib.packages.Rule workspaceRule = externalPackage
                    .getRule(repositoryName.strippedName());

            DefaultModelResolver modelResolver = resolver.getModelResolver();
            AttributeMap attributeMap = AggregatingAttributeMapper.of(workspaceRule);
            Rule rule;
            try {
                rule = new Rule(Resolver.getArtifact(attributeMap.get("artifact", Type.STRING)));
            } catch (InvalidArtifactCoordinateException e) {
                handler.handle(Event.error(location, "Couldn't get attribute: " + e.getMessage()));
                return;
            }
            if (attributeMap.isAttributeValueExplicitlySpecified("repository")) {
                modelResolver.addUserRepository(attributeMap.get("repository", Type.STRING));
                rule.setRepository(attributeMap.get("repository", Type.STRING), handler);
            }
            if (attributeMap.isAttributeValueExplicitlySpecified("sha1")) {
                rule.setSha1(attributeMap.get("sha1", Type.STRING));
            } else {
                rule.setSha1(resolver.downloadSha1(rule));
            }

            ModelSource modelSource;
            try {
                modelSource = modelResolver.resolveModel(rule.groupId(), rule.artifactId(), rule.version());
            } catch (UnresolvableModelException e) {
                handler.handle(Event.error("Could not resolve model for " + target + ": " + e.getMessage()));
                continue;
            }
            resolver.addArtifact(rule, modelSource.getLocation());
            resolver.resolveEffectiveModel(modelSource, Sets.<String>newHashSet(), rule);
        } else if (!target.getTargetKind().startsWith("bind")
                && !target.getTargetKind().startsWith("source ")) {
            handler.handle(Event.warn(location,
                    "Cannot fetch transitive dependencies for " + target + " yet, skipping"));
        }
    }
}

From source file:org.sonatype.maven.polyglot.PolyglotModelUtil.java

License:Open Source License

public static File getLocationFile(final Map<?, ?> options) {
    if (options != null) {
        Object src = options.get(ModelProcessor.SOURCE);
        if (src instanceof URL) {
            return new File(((URL) src).getFile());
        } else if (src != null) {
            ModelSource sm = (ModelSource) src;
            return new File(sm.getLocation());
        }/*from ww  w  .  j a  v a2s  . c  o m*/
    }
    return null;
}

From source file:org.sonatype.maven.polyglot.TeslaModelProcessor.java

License:Open Source License

@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public Model read(final Reader input, final Map<String, ?> options) throws IOException, ModelParseException {
    assert manager != null;
    ModelSource source = (ModelSource) options.get(ModelProcessor.SOURCE);
    if (("" + source).contains(".polyglot.")) {
        log.debug(source.getLocation());

        File pom = new File(source.getLocation());
        source = new FileModelSource(new File(pom.getPath().replaceFirst("[.]polyglot[.]", "")));

        ((Map) options).put(ModelProcessor.SOURCE, source);

        ModelReader reader = manager.getReaderFor(options);
        Model model = reader.read(source.getInputStream(), options);

        MavenXpp3Writer xmlWriter = new MavenXpp3Writer();
        StringWriter xml = new StringWriter();
        xmlWriter.write(xml, model);// w  w w. ja  v a  2s  .c o  m

        FileUtils.fileWrite(pom, xml.toString());

        // dump pom if filename is given via the pom properties
        String dump = model.getProperties().getProperty("polyglot.dump.pom");
        if (dump == null) {
            // just nice to dump the pom.xml via commandline switch
            dump = System.getProperty("polyglot.dump.pom");
        }
        if (dump != null) {
            File dumpPom = new File(pom.getParentFile(), dump);
            if (!dumpPom.exists() || !FileUtils.fileRead(dumpPom).equals(xml.toString())) {
                dumpPom.setWritable(true);
                FileUtils.fileWrite(dumpPom, xml.toString());
                if ("true".equals(model.getProperties().getProperty("polyglot.dump.readonly"))) {
                    dumpPom.setReadOnly();
                }
            }
        }

        model.setPomFile(pom);
        return model;
    } else {
        ModelReader reader = manager.getReaderFor(options);
        return reader.read(input, options);
    }
}