KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > hudson > maven > reporters > MavenArtifactArchiver


1 package hudson.maven.reporters;
2
3 import hudson.FilePath;
4 import hudson.maven.MavenBuild;
5 import hudson.maven.MavenBuildProxy;
6 import hudson.maven.MavenBuildProxy.BuildCallable;
7 import hudson.maven.MavenModule;
8 import hudson.maven.MavenReporter;
9 import hudson.maven.MavenReporterDescriptor;
10 import hudson.model.BuildListener;
11 import hudson.model.FingerprintMap;
12 import hudson.model.Hudson;
13 import org.apache.maven.artifact.Artifact;
14 import org.apache.maven.project.MavenProject;
15
16 import java.io.File JavaDoc;
17 import java.io.IOException JavaDoc;
18 import java.util.HashSet JavaDoc;
19 import java.util.Set JavaDoc;
20
21 /**
22  * Archives artifacts of the build.
23  *
24  * @author Kohsuke Kawaguchi
25  */

26 public class MavenArtifactArchiver extends MavenReporter {
27     public boolean postBuild(MavenBuildProxy build, MavenProject pom, BuildListener listener) throws InterruptedException JavaDoc, IOException JavaDoc {
28         final Set JavaDoc<FilePath> archivedFiles = new HashSet JavaDoc<FilePath>();
29
30         record(build,pom.getArtifact(),listener,archivedFiles);
31         for( Object JavaDoc a : pom.getAttachedArtifacts() )
32             record(build,(Artifact)a,listener,archivedFiles);
33
34         // record fingerprints
35
build.execute(new BuildCallable<Void JavaDoc,IOException JavaDoc>() {
36             public Void JavaDoc call(MavenBuild build) throws IOException JavaDoc, InterruptedException JavaDoc {
37                 FingerprintMap map = Hudson.getInstance().getFingerprintMap();
38                 for (FilePath file : archivedFiles)
39                     map.getOrCreate(build, file.getName(), file.digest());
40                 return null;
41             }
42         });
43
44         return true;
45     }
46
47     /**
48      * Archives the given {@link Artifact}.
49      */

50     private void record(MavenBuildProxy build, Artifact a, BuildListener listener, Set JavaDoc<FilePath> archivedFiles) throws IOException JavaDoc, InterruptedException JavaDoc {
51         File JavaDoc file = a.getFile();
52         if(file==null)
53             return; // perhaps build failed and didn't leave an artifact
54
if(!file.exists() || file.isDirectory())
55             return; // during a build maven sets a class folder instead of a jar file as artifact. ignore.
56

57         listener.getLogger().println("Archiving "+ file);
58
59         FilePath target = build.getArtifactsDir()
60             .child(a.getGroupId())
61             .child(a.getArtifactId())
62             .child(a.getVersion())
63             .child(a.getArtifactId() + '-' + a.getVersion() + (a.getClassifier() != null ? '-' + a.getClassifier() : "") + '.' + a.getType());
64
65         new FilePath(file).copyTo(target);
66
67         archivedFiles.add(target);
68     }
69
70     public DescriptorImpl getDescriptor() {
71         return DescriptorImpl.DESCRIPTOR;
72     }
73
74     public static final class DescriptorImpl extends MavenReporterDescriptor {
75         public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl();
76
77         private DescriptorImpl() {
78             super(MavenArtifactArchiver.class);
79         }
80
81         public String JavaDoc getDisplayName() {
82             return "Archive the artifacts";
83         }
84
85         public MavenReporter newAutoInstance(MavenModule module) {
86             return new MavenArtifactArchiver();
87         }
88     }
89
90     private static final long serialVersionUID = 1L;
91 }
92
Popular Tags