All Downloads are FREE. Search and download functionalities are using the official Maven repository.

hudson.maven.PomInfo Maven / Gradle / Ivy

Go to download

This plug-in provides deep integration of Hudson and Maven. This functionality used to be part of the Hudson core. Now it is a plug-in that is installed by default, but can be disabled.

There is a newer version: 2.2.0
Show newest version
/*
 * The MIT License
 * 
 * Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
package hudson.maven;

import org.apache.commons.lang.StringUtils;
import org.apache.maven.model.CiManagement;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.Extension;
import org.apache.maven.model.Notifier;
import org.apache.maven.model.Plugin;
import org.apache.maven.model.ReportPlugin;
import org.apache.maven.project.MavenProject;

import java.io.Serializable;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.ArrayList;

/**
 * Serializable representation of the key information obtained from Maven POM.
 *
 * 

* This is used for the master to introspect POM, which is only available * as {@link MavenProject} object on slaves. * * @author Kohsuke Kawaguchi */ final class PomInfo implements Serializable { public final ModuleName name; /** * This is a human readable name of the POM. Not necessarily unique * or file system safe. * * @see MavenProject#getName() */ public final String displayName; /** * Relative path from the root directory of the root POM to * the root directory of this module. * * Strings like "" (if this is the root), "abc", "foo/bar/zot". */ public final String relativePath; /** * Version number taken from POM. * * @see MavenProject#getVersion() */ public final String version; /** * Dependency of this project. * * See Maven's ProjectSorter class for the definition of the 'dependencies' in Maven. */ public final Set dependencies = new HashSet(); /** * Children of this module. */ public final List children = new ArrayList(); /** * The default goal specified in POM or null. */ public final String defaultGoal; /** * Parent module. */ public final PomInfo parent; /** * maven groupId */ private final String groupId; /** * maven artifactId */ private final String artifactId; public final Notifier mailNotifier; public PomInfo(MavenProject project, PomInfo parent, String relPath) { this.name = new ModuleName(project); this.version = project.getVersion(); this.displayName = project.getName(); this.defaultGoal = project.getDefaultGoal(); this.relativePath = relPath; this.parent = parent; if(parent!=null) parent.children.add(name); for (Dependency dep : (List)project.getDependencies()) dependencies.add(new ModuleDependency(dep)); MavenProject parentProject = project.getParent(); if(parentProject!=null) dependencies.add(new ModuleDependency(parentProject)); if(parent!=null) dependencies.add(parent.asDependency()); addPluginsAsDependencies(project.getBuildPlugins(),dependencies); addReportPluginsAsDependencies(project.getReportPlugins(),dependencies); List extensions = project.getBuildExtensions(); if(extensions!=null) for (Extension ext : extensions) dependencies.add(new ModuleDependency(ext)); // when the parent POM uses a plugin and builds a plugin at the same time, // the plugin module ends up depending on itself dependencies.remove(asDependency()); CiManagement ciMgmt = project.getCiManagement(); if ((ciMgmt != null) && (ciMgmt.getSystem()==null || ciMgmt.getSystem().equals("hudson"))) { Notifier mailNotifier = null; for (Notifier n : (List)ciMgmt.getNotifiers()) { if (n.getType().equals("mail")) { mailNotifier = n; break; } } this.mailNotifier = mailNotifier; } else this.mailNotifier = null; this.groupId = project.getGroupId(); this.artifactId = project.getArtifactId(); } /** * Creates {@link ModuleDependency} that represents this {@link PomInfo}. */ private ModuleDependency asDependency() { return new ModuleDependency(name,version); } private void addPluginsAsDependencies(List plugins, Set dependencies) { if(plugins==null) return; for (Plugin p : plugins) dependencies.add(new ModuleDependency(p)); } private void addReportPluginsAsDependencies(List plugins, Set dependencies) { if(plugins==null) return; for (ReportPlugin p : plugins) dependencies.add(new ModuleDependency(p)); } /** * Avoids dependency cycles. * *

* People often write configuration in parent POMs that use the plugin * which is a part of the build. To avoid this kind of dependency, * make sure parent POMs don't depend on a child module. */ /*package*/ void cutCycle() { ModuleDependency dep = asDependency(); for(PomInfo p=parent; p!=null; p=p.parent) { if(p.dependencies.contains(dep)) p.dependencies.remove(dep); } } /** * Computes the number of ancestors of this POM. * returns 0 if this is the top-level module. */ public int getNestLevel() { int i=0; for(PomInfo p=parent; p!=null; p=p.parent) i++; return i; } private static final long serialVersionUID = 1L; @Override public int hashCode() { int hash = 23 + this.groupId == null ? 1 : this.groupId.hashCode(); hash += this.artifactId == null ? 1 : this.artifactId.hashCode(); return hash; } @Override public boolean equals( Object obj ) { if (obj == null) { return false; } if (obj == this) { return true; } if (!(obj instanceof PomInfo)) { return false; } PomInfo pomInfo = (PomInfo) obj; return StringUtils.equals( pomInfo.groupId, this.groupId ) && StringUtils.equals( pomInfo.artifactId, this.artifactId ); } /** * for debug purpose */ public String toString() { return "PomInfo:["+groupId+':'+artifactId+']'+"[relativePath:"+relativePath+']'; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy