/******************************************************************************* * Copyright (c) 2010, 2014 Sonatype, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Sonatype, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.aether.internal.ant.tasks; import java.io.File; import java.util.HashMap; import java.util.Map; import org.apache.maven.model.Model; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.Task; import org.apache.tools.ant.types.Reference; import org.eclipse.aether.internal.ant.AntRepoSys; import org.eclipse.aether.internal.ant.types.Artifact; import org.eclipse.aether.internal.ant.types.Artifacts; import org.eclipse.aether.internal.ant.types.Pom; /** */ public abstract class AbstractDistTask extends Task { private Pom pom; private Artifacts artifacts; protected void validate() { getArtifacts().validate( this ); Map<String, File> duplicates = new HashMap<String, File>(); for ( Artifact artifact : getArtifacts().getArtifacts() ) { String key = artifact.getType() + ':' + artifact.getClassifier(); if ( "pom:".equals( key ) ) { throw new BuildException( "You must not specify an <artifact> with type=pom" + ", please use the <pom> element instead." ); } else if ( duplicates.containsKey( key ) ) { throw new BuildException( "You must not specify two or more artifacts with the same type (" + artifact.getType() + ") and classifier (" + artifact.getClassifier() + ")" ); } else { duplicates.put( key, artifact.getFile() ); } validateArtifactGav( artifact ); } Pom defaultPom = AntRepoSys.getInstance( getProject() ).getDefaultPom(); if ( pom == null && defaultPom != null ) { log( "Using default POM (" + defaultPom.getCoords() + ")", Project.MSG_INFO ); pom = defaultPom; } if ( pom == null ) { throw new BuildException( "You must specify the <pom file=\"...\"> element" + " to denote the descriptor for the artifacts" ); } if ( pom.getFile() == null ) { throw new BuildException( "You must specify a <pom> element that has the 'file' attribute set" ); } } private void validateArtifactGav( Artifact artifact ) { Pom artifactPom = artifact.getPom(); if ( artifactPom != null ) { String gid; String aid; String version; if ( artifactPom.getFile() != null ) { Model model = artifactPom.getModel( this ); gid = model.getGroupId(); aid = model.getArtifactId(); version = model.getVersion(); } else { gid = artifactPom.getGroupId(); aid = artifactPom.getArtifactId(); version = artifactPom.getVersion(); } Model model = getPom().getModel( this ); if ( ! ( model.getGroupId().equals( gid ) && model.getArtifactId().equals( aid ) && model.getVersion().equals( version )) ) { throw new BuildException( "Artifact references different pom than it would be installed with: " + artifact.toString() ); } } } protected Artifacts getArtifacts() { if ( artifacts == null ) { artifacts = new Artifacts(); artifacts.setProject( getProject() ); } return artifacts; } public void addArtifact( Artifact artifact ) { getArtifacts().addArtifact( artifact ); } public void addArtifacts( Artifacts artifacts ) { getArtifacts().addArtifacts( artifacts ); } public void setArtifactsRef( Reference ref ) { Artifacts artifacts = new Artifacts(); artifacts.setProject( getProject() ); artifacts.setRefid( ref ); getArtifacts().addArtifacts( artifacts ); } protected Pom getPom() { if ( pom == null ) { return AntRepoSys.getInstance( getProject() ).getDefaultPom(); } return pom; } public void addPom( Pom pom ) { if ( this.pom != null ) { throw new BuildException( "You must not specify multiple <pom> elements" ); } this.pom = pom; } public void setPomRef( Reference ref ) { if ( this.pom != null ) { throw new BuildException( "You must not specify multiple <pom> elements" ); } pom = new Pom(); pom.setProject( getProject() ); pom.setRefid( ref ); } }