
org.whitesource.agent.dependency.resolver.maven.MavenPomParser Maven / Gradle / Ivy
Show all versions of whitesource-fs-agent Show documentation
/**
* Copyright (C) 2017 WhiteSource Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.whitesource.agent.dependency.resolver.maven;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.Model;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.slf4j.Logger;
import org.whitesource.agent.Constants;
import org.whitesource.agent.api.model.DependencyInfo;
import org.whitesource.agent.api.model.DependencyType;
import org.whitesource.agent.dependency.resolver.BomFile;
import org.whitesource.agent.dependency.resolver.IBomParser;
import org.whitesource.agent.utils.LoggerFactory;
import java.io.File;
import java.io.FileReader;
import java.nio.file.Paths;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* This class represents an MAVEN pom.xml file.
*
* @author eugen.horovitz
*/
public class MavenPomParser extends MavenTreeDependencyCollector implements IBomParser {
public final String COULD_NOT_PARSE_POM_FILE = "Could not parse pom file ";
/* --- Static members --- */
private static final String VERSION_REGEX = "(\\d+\\.\\d+(\\.\\d+)?(?:-\\w+(?:\\.\\w+)*)?(?:\\+\\w+)?)";
private final Logger logger = LoggerFactory.getLogger(MavenPomParser.class);
private boolean ignorePomModules;
/* --- Constructor --- */
public MavenPomParser(boolean ignorePomModules) {
reader = new MavenXpp3Reader();
this.ignorePomModules = ignorePomModules;
}
/* --- Members --- */
private final MavenXpp3Reader reader;
@Override
public BomFile parseBomFile(String bomPath) {
Model model = getModel(bomPath);
if (model != null && model.getArtifactId() != null) {
return new BomFile(model.getGroupId(), model.getArtifactId(),model.getVersion(),bomPath);
}
return null;
}
public List parseDependenciesFromPomXml(String bomPath) {
Model model = getModel(bomPath);
if (model != null && model.getArtifactId() != null && (!ignorePomModules || !model.getPackaging().equals(Constants.POM))) {
// ignoring POM modules if 'ignorePosModule=true'
List directDependencies = Collections.emptyList();
List managementDependencies = Collections.emptyList();
if (model.getDependencyManagement() != null && model.getDependencyManagement().getDependencies() != null) {
managementDependencies = model.getDependencyManagement().getDependencies();
}
if (model.getDependencies() != null) {
directDependencies = model.getDependencies();
}
List dependencies = new LinkedList<>();
dependencies.addAll(directDependencies);
dependencies.addAll(managementDependencies);
List dependenciesInfo = new LinkedList<>();
//in case the 'properties' node contains version data - extract it to be used later
HashMap versionDependencyMap = new HashMap<>();
String key, value;
for (Map.Entry