1 package org.apache.maven.tools.plugin.util;
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 java.util.Collections;
23 import java.util.Comparator;
24 import java.util.HashMap;
25 import java.util.List;
26 import java.util.Map;
27
28 import org.apache.maven.plugin.descriptor.MojoDescriptor;
29 import org.apache.maven.plugin.descriptor.Parameter;
30 import org.codehaus.plexus.util.DirectoryScanner;
31 import org.codehaus.plexus.util.FileUtils;
32 import org.codehaus.plexus.util.StringUtils;
33
34 /**
35 * Convenience methods to play with Maven plugins.
36 *
37 * @author jdcasey
38 * @version $Id: PluginUtils.html 1024032 2018-01-19 18:16:30Z hboutemy $
39 */
40 public final class PluginUtils
41 {
42 private PluginUtils()
43 {
44 // nop
45 }
46
47 /**
48 * Expression associated with class types to recognize Maven objects (injected in fact as parameters by <a
49 * href="/ref/current/maven-core/apidocs/org/apache/maven/plugin/PluginParameterExpressionEvaluator.html">
50 * maven-core's PluginParameterExpressionEvaluator</a>) like components ("real" components are injected by Plexus).
51 *
52 * @deprecated wrong approach (fake components), documented parameter default values instead to learn people how to
53 * discover them
54 */
55 public static final Map<String, String> MAVEN_COMPONENTS;
56 static
57 {
58 Map<String, String> mavenComponents = new HashMap<String, String>();
59
60 mavenComponents.put( "org.apache.maven.execution.MavenSession", "${session}" );
61 mavenComponents.put( "org.apache.maven.project.MavenProject", "${project}" );
62 mavenComponents.put( "org.apache.maven.plugin.MojoExecution", "${mojoExecution}" );
63 mavenComponents.put( "org.apache.maven.plugin.descriptor.PluginDescriptor", "${plugin}" );
64 mavenComponents.put( "org.apache.maven.settings.Settings", "${settings}" );
65
66 MAVEN_COMPONENTS = Collections.unmodifiableMap( mavenComponents );
67 }
68
69 /**
70 * @param basedir not null
71 * @param include not null
72 * @return list of included files with default SCM excluded files
73 */
74 public static String[] findSources( String basedir, String include )
75 {
76 return PluginUtils.findSources( basedir, include, null );
77 }
78
79 /**
80 * @param basedir not null
81 * @param include not null
82 * @param exclude could be null
83 * @return list of included files
84 */
85 public static String[] findSources( String basedir, String include, String exclude )
86 {
87 DirectoryScanner scanner = new DirectoryScanner();
88 scanner.setBasedir( basedir );
89 scanner.setIncludes( new String[] { include } );
90 if ( !StringUtils.isEmpty( exclude ) )
91 {
92 scanner.setExcludes( new String[] { exclude, StringUtils.join( FileUtils.getDefaultExcludes(), "," ) } );
93 }
94 else
95 {
96 scanner.setExcludes( FileUtils.getDefaultExcludes() );
97 }
98
99 scanner.scan();
100
101 return scanner.getIncludedFiles();
102 }
103
104 /**
105 * Sorts the specified mojo descriptors by goal name.
106 *
107 * @param mojoDescriptors The mojo descriptors to sort, may be <code>null</code>.
108 * @see MojoDescriptor#getGoal()
109 */
110 public static void sortMojos( List<MojoDescriptor> mojoDescriptors )
111 {
112 if ( mojoDescriptors != null )
113 {
114 Collections.sort( mojoDescriptors, new Comparator<MojoDescriptor>()
115 {
116 /** {@inheritDoc} */
117 public int compare( MojoDescriptor mojo0, MojoDescriptor mojo1 )
118 {
119 return mojo0.getGoal().compareToIgnoreCase( mojo1.getGoal() );
120 }
121 } );
122 }
123 }
124
125 /**
126 * Sorts the specified mojo parameters by name.
127 *
128 * @param parameters The mojo parameters to sort, may be <code>null</code>.
129 * @see Parameter#getName()
130 * @since 2.4.4
131 */
132 public static void sortMojoParameters( List<Parameter> parameters )
133 {
134 if ( parameters != null )
135 {
136 Collections.sort( parameters, new Comparator<Parameter>()
137 {
138 /** {@inheritDoc} */
139 public int compare( Parameter parameter1, Parameter parameter2 )
140 {
141 return parameter1.getName().compareToIgnoreCase( parameter2.getName() );
142 }
143 } );
144 }
145 }
146 }