将文件集指定为命令行参数的任何方法



我正在创建一个不需要项目来运行的Mojo。

我想使用类似于org.apache.maven.model.FileSet的东西(提供包含和排除多个目录)作为@parameter,但我的问题是,我需要能够使用命令行设置这些值。

知道如何实现这一点吗?

参见:

  • Java插件开发指南,参数类型与多值
  • 使用插件工具Java5注释
  • Maven Plugin Tool for Annotations, Supported Annotations
  • org.apache.maven.model.FileSet

POM

  <groupId>so</groupId>
  <artifactId>multiple-values-maven-plugin</artifactId>
  <version>1.0</version>
  <packaging>maven-plugin</packaging>
  <dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-plugin-api</artifactId>
      <version>3.3.3</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.plugin-tools</groupId>
      <artifactId>maven-plugin-annotations</artifactId>
      <version>3.4</version>
      <scope>provided</scope><!-- annotations are needed only to build the plugin -->
    </dependency>
  </dependencies>
  <!-- This latest plugin has to be used if using Java 8 classes. -->
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-plugin-plugin</artifactId>
        <version>3.4</version>
      </plugin>
    </plugins>
  </build>

的运气
package so;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import org.apache.maven.model.FileSet;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
@Mojo( name = "values", requiresProject = false )
public class MultipleValuesMojo extends AbstractMojo
    {
    @Parameter( property = "array", required = true )
    private String[] array;
    @Parameter( property = "list", required = true )
    private List<String> list;
    @Parameter( property = "set", required = true )
    private String[] setElements;
    private Set<String> set;
    @Parameter( property = "map", required = true )
    private String[] mapEntries;
    private Map<String, String> map;
    @Parameter( property = "includes", required = true )
    private List<String> includes;
    @Parameter( property = "excludes", required = true )
    private List<String> excludes;
    @Override
    public void execute() throws MojoExecutionException
        {
        getLog().info( "Array: " + Arrays.toString( array ) );
        getLog().info( " List: " + list.toString() );
        set = Arrays.stream( setElements ).collect( Collectors.toSet() ); // with Java >=8
        addSetElementsToSet(); // with Java <8
        getLog().info( "  Set: " + set.toString() );
        map = Arrays.stream( mapEntries ).collect( Collectors.toMap( s -> s, s -> s ) ); // with Java >=8
        putMapEntriesToMap(); // with Java <8
        getLog().info( "  Map: " + map.toString() );
        getLog().info( "Includes: " + includes.toString() );
        getLog().info( "Excludes: " + excludes.toString() );
        FileSet fileSet = new FileSet();
        fileSet.setIncludes( includes );
        fileSet.setExcludes( excludes );
        getLog().info( " FileSet: " + fileSet.toString() );
        } // execute()
    private void addSetElementsToSet()
        {
        set = new HashSet<String>( setElements.length );
        for ( String entry : setElements )
            {
            set.add( entry );
            }
        } // addSetElementsToSet()
    private void putMapEntriesToMap()
        {
        map = new HashMap<String, String>( mapEntries.length );
        for ( String entry : mapEntries )
            {
            int equalsPosition = entry.indexOf( "=" );
            map.put(
                entry.substring( 0, equalsPosition ),
                entry.substring( equalsPosition + 1 ) );
            }
        } // putMapEntriesToMap()
    } // MultipleValuesMojo

运行
mvn so:multiple-value-maven-plugin:values
  -Darray=VALUE_1,VALUE_2,VALUE_3
  -Dlist=VALUE_1,VALUE_2,VALUE_3
  -Dset=VALUE_1,VALUE_2,VALUE_3
  -Dmap=KEY_1=VALUE_1,KEY_2=VALUE_2,KEY_3=VALUE_3
  -Dincludes=/,/usr/*
  -Dexcludes=/root,/tmp 
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building multiple-values-maven-plugin 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- multiple-values-maven-plugin:1.0:values (default-cli) @ multiple-values-maven-plugin ---
[INFO] Array: [VALUE_1, VALUE_2, VALUE_3]
[INFO]  List: [VALUE_1, VALUE_2, VALUE_3]
[INFO]   Set: [VALUE_3, VALUE_2, VALUE_1]
[INFO]   Map: {KEY_1=VALUE_1, KEY_3=VALUE_3, KEY_2=VALUE_2}
[INFO] Includes: [/, /usr/*]
[INFO] Excludes: [/root, /tmp]
[INFO]  FileSet: FileSet {directory: null, PatternSet [includes: {/, /usr/*}, excludes: {/root, /tmp}]}
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.671 s
[INFO] Finished at: 2015-07-25T21:44:09+02:00
[INFO] Final Memory: 11M/115M
[INFO] ------------------------------------------------------------------------

有人在寻找解决方案吗?

-D<some-property>.fileSet=['path-to-fileset']

对我起了作用。它可能需要稍加修改,这取决于你正在配置的插件,但是你明白了。

在Maven 3.5.0上测试

相关内容

  • 没有找到相关文章

最新更新