1 package org.apache.maven.artifact.installer;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.artifact.Artifact;
23 import org.apache.maven.artifact.metadata.ArtifactMetadata;
24 import org.apache.maven.artifact.repository.ArtifactRepository;
25 import org.apache.maven.artifact.repository.metadata.RepositoryMetadataInstallationException;
26 import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager;
27 import org.apache.maven.artifact.transform.ArtifactTransformationManager;
28 import org.codehaus.plexus.logging.AbstractLogEnabled;
29 import org.codehaus.plexus.util.FileUtils;
30
31 import java.io.File;
32 import java.io.IOException;
33 import java.util.Iterator;
34
35 public class DefaultArtifactInstaller
36 extends AbstractLogEnabled
37 implements ArtifactInstaller
38 {
39 private ArtifactTransformationManager transformationManager;
40
41 private RepositoryMetadataManager repositoryMetadataManager;
42
43
44
45
46 public void install( String basedir, String finalName, Artifact artifact, ArtifactRepository localRepository )
47 throws ArtifactInstallationException
48 {
49 String extension = artifact.getArtifactHandler().getExtension();
50 File source = new File( basedir, finalName + "." + extension );
51
52 install( source, artifact, localRepository );
53 }
54
55 public void install( File source, Artifact artifact, ArtifactRepository localRepository )
56 throws ArtifactInstallationException
57 {
58
59
60
61
62
63
64
65
66 boolean useArtifactFile = false;
67 File oldArtifactFile = artifact.getFile();
68 if ( "pom".equals( artifact.getType() ) )
69 {
70 artifact.setFile( source );
71 useArtifactFile = true;
72 }
73
74 try
75 {
76 transformationManager.transformForInstall( artifact, localRepository );
77
78
79
80
81 if ( useArtifactFile )
82 {
83 source = artifact.getFile();
84 artifact.setFile( oldArtifactFile );
85 }
86
87 String localPath = localRepository.pathOf( artifact );
88
89
90 File destination = new File( localRepository.getBasedir(), localPath );
91 if ( !destination.getParentFile().exists() )
92 {
93 destination.getParentFile().mkdirs();
94 }
95
96 getLogger().info( "Installing " + source.getPath() + " to " + destination );
97
98 FileUtils.copyFile( source, destination );
99
100
101
102 if ( useArtifactFile )
103 {
104 artifact.setFile( destination );
105 }
106
107
108 for ( Iterator i = artifact.getMetadataList().iterator(); i.hasNext(); )
109 {
110 ArtifactMetadata metadata = (ArtifactMetadata) i.next();
111 repositoryMetadataManager.install( metadata, localRepository );
112 }
113
114
115
116 }
117 catch ( IOException e )
118 {
119 throw new ArtifactInstallationException( "Error installing artifact: " + e.getMessage(), e );
120 }
121 catch ( RepositoryMetadataInstallationException e )
122 {
123 throw new ArtifactInstallationException( "Error installing artifact's metadata: " + e.getMessage(), e );
124 }
125 }
126 }