View Javadoc

1   package org.apache.maven.plugin.assembly.mojos;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import org.apache.maven.artifact.Artifact;
23  import org.apache.maven.plugin.AbstractMojo;
24  import org.apache.maven.plugin.MojoExecutionException;
25  import org.apache.maven.plugin.MojoFailureException;
26  import org.apache.maven.plugin.assembly.archive.ArchiveExpansionException;
27  import org.apache.maven.plugin.assembly.utils.AssemblyFileUtils;
28  import org.apache.maven.project.MavenProject;
29  import org.codehaus.plexus.archiver.manager.ArchiverManager;
30  import org.codehaus.plexus.archiver.manager.NoSuchArchiverException;
31  
32  import java.io.File;
33  import java.util.Iterator;
34  import java.util.LinkedHashSet;
35  import java.util.Set;
36  
37  /**
38   * Unpack project dependencies. Currently supports dependencies of type jar and zip.
39   * 
40   * @version $Id: UnpackMojo.java 999625 2010-09-21 20:40:39Z jdcasey $
41   * @goal unpack
42   * @requiresDependencyResolution test
43   * @inheritByDefault false
44   * @deprecated Use org.apache.maven.plugins:maven-dependency-plugin goal: unpack or unpack-dependencies instead.
45   */
46  @Deprecated
47  public class UnpackMojo
48      extends AbstractMojo
49  {
50  
51      /**
52       * @parameter default-value="${project}"
53       * @required
54       * @readonly
55       */
56      private MavenProject project;
57  
58      /**
59       * @component
60       */
61      private ArchiverManager archiverManager;
62  
63      /**
64       * Directory to unpack JARs into if needed
65       * 
66       * @parameter expression="${project.build.directory}/assembly/work"
67       * @required
68       */
69      protected File workDirectory;
70  
71      /**
72       * Unpacks the archive file.
73       * 
74       * @throws MojoExecutionException
75       */
76      public void execute()
77          throws MojoExecutionException, MojoFailureException
78      {
79          final Set<Artifact> dependencies = new LinkedHashSet<Artifact>();
80  
81          if ( project.getArtifact() != null && project.getArtifact()
82                                                       .getFile() != null )
83          {
84              dependencies.add( project.getArtifact() );
85          }
86  
87          @SuppressWarnings( "unchecked" )
88          final Set<Artifact> projectArtifacts = project.getArtifacts();
89          if ( projectArtifacts != null )
90          {
91              dependencies.addAll( projectArtifacts );
92          }
93  
94          for ( final Iterator<Artifact> j = dependencies.iterator(); j.hasNext(); )
95          {
96              final Artifact artifact = j.next();
97  
98              final String name = artifact.getFile()
99                                          .getName();
100 
101             final File tempLocation = new File( workDirectory, name.substring( 0, name.lastIndexOf( '.' ) ) );
102             boolean process = false;
103             if ( !tempLocation.exists() )
104             {
105                 tempLocation.mkdirs();
106                 process = true;
107             }
108             else if ( artifact.getFile()
109                               .lastModified() > tempLocation.lastModified() )
110             {
111                 process = true;
112             }
113 
114             if ( process )
115             {
116                 final File file = artifact.getFile();
117                 try
118                 {
119                     AssemblyFileUtils.unpack( file, tempLocation, archiverManager );
120                 }
121                 catch ( final NoSuchArchiverException e )
122                 {
123                     getLog().info( "Skip unpacking dependency file with unknown extension: " + file.getPath() );
124                 }
125                 catch ( final ArchiveExpansionException e )
126                 {
127                     throw new MojoExecutionException( "Error unpacking dependency file: " + file, e );
128                 }
129             }
130         }
131     }
132 
133 }