1 package org.apache.maven.project.artifact; 2 3 18 19 import org.apache.maven.artifact.Artifact; 20 import org.apache.maven.artifact.ArtifactStatus; 21 import org.apache.maven.artifact.metadata.AbstractArtifactMetadata; 22 import org.apache.maven.artifact.metadata.ArtifactMetadata; 23 import org.apache.maven.artifact.repository.ArtifactRepository; 24 import org.apache.maven.artifact.repository.metadata.RepositoryMetadataStoreException; 25 import org.apache.maven.model.DistributionManagement; 26 import org.apache.maven.model.Model; 27 import org.apache.maven.model.io.xpp3.MavenXpp3Reader; 28 import org.apache.maven.model.io.xpp3.MavenXpp3Writer; 29 import org.codehaus.plexus.util.IOUtil; 30 import org.codehaus.plexus.util.xml.pull.XmlPullParserException; 31 32 import java.io.File ; 33 import java.io.FileNotFoundException ; 34 import java.io.FileReader ; 35 import java.io.FileWriter ; 36 import java.io.IOException ; 37 import java.io.StringReader ; 38 import java.io.StringWriter ; 39 40 46 public class ProjectArtifactMetadata 47 extends AbstractArtifactMetadata 48 { 49 private final File file; 50 51 public ProjectArtifactMetadata( Artifact artifact ) 52 { 53 this( artifact, null ); 54 } 55 56 public ProjectArtifactMetadata( Artifact artifact, File file ) 57 { 58 super( artifact ); 59 this.file = file; 60 } 61 62 public String getRemoteFilename() 63 { 64 return getFilename(); 65 } 66 67 public String getLocalFilename( ArtifactRepository repository ) 68 { 69 return getFilename(); 70 } 71 72 private String getFilename() 73 { 74 return getArtifactId() + "-" + artifact.getVersion() + ".pom"; 75 } 76 77 public void storeInLocalRepository( ArtifactRepository localRepository, ArtifactRepository remoteRepository ) 78 throws RepositoryMetadataStoreException 79 { 80 File destination = new File ( localRepository.getBasedir(), 81 localRepository.pathOfLocalRepositoryMetadata( this, remoteRepository ) ); 82 83 destination.getParentFile().mkdirs(); 84 85 FileReader reader = null; 86 FileWriter writer = null; 87 try 88 { 89 reader = new FileReader ( file ); 90 StringWriter sWriter = new StringWriter (); 91 IOUtil.copy( reader, sWriter ); 92 93 String modelSrc = sWriter.toString().replaceAll( "\\$\\{(pom\\.|project\\.)?version\\}", artifact.getBaseVersion() ); 94 95 StringReader sReader = new StringReader ( modelSrc ); 96 97 writer = new FileWriter ( destination ); 98 99 MavenXpp3Reader modelReader = new MavenXpp3Reader(); 100 Model model = modelReader.read( sReader, false ); 101 model.setVersion( artifact.getVersion() ); 102 103 DistributionManagement distributionManagement = model.getDistributionManagement(); 104 if ( distributionManagement == null ) 105 { 106 distributionManagement = new DistributionManagement(); 107 model.setDistributionManagement( distributionManagement ); 108 } 109 distributionManagement.setStatus( ArtifactStatus.DEPLOYED.toString() ); 110 111 MavenXpp3Writer modelWriter = new MavenXpp3Writer(); 112 modelWriter.write( writer, model ); 113 } 114 catch ( FileNotFoundException e ) 115 { 116 throw new RepositoryMetadataStoreException( "Error rewriting POM", e ); 117 } 118 catch ( IOException e ) 119 { 120 throw new RepositoryMetadataStoreException( "Error rewriting POM", e ); 121 } 122 catch ( XmlPullParserException e ) 123 { 124 throw new RepositoryMetadataStoreException( "Error rewriting POM", e ); 125 } 126 finally 127 { 128 IOUtil.close( reader ); 129 IOUtil.close( writer ); 130 } 131 } 132 133 public String toString() 134 { 135 return "project information for " + artifact.getArtifactId() + " " + artifact.getVersion(); 136 } 137 138 public boolean storedInArtifactVersionDirectory() 139 { 140 return true; 141 } 142 143 public String getBaseVersion() 144 { 145 return artifact.getBaseVersion(); 146 } 147 148 public Object getKey() 149 { 150 return "project " + artifact.getGroupId() + ":" + artifact.getArtifactId(); 151 } 152 153 public void merge( ArtifactMetadata metadata ) 154 { 155 ProjectArtifactMetadata m = (ProjectArtifactMetadata) metadata; 156 if ( !m.file.equals( file ) ) 157 { 158 throw new IllegalStateException ( "Cannot add two different pieces of metadata for: " + getKey() ); 159 } 160 } 161 } 162 | Popular Tags |