代码之家  ›  专栏  ›  技术社区  ›  Christopher Klewes

如何用maven原型创建空文件夹?

  •  15
  • Christopher Klewes  · 技术社区  · 14 年前

    这种方法存在一个问题,位于 Codehaus JIRA #ARCHETYPE-57 ,但这张罚单上列出的所有指示对我来说都失败了。也是Marekdec的博客 How to get maven archetype to generate empty directories 对我来说失败了。

    其中的诀窍 archetype.xml 有拖尾的 / 不适合我:

    <resources>
      <resource>src/main/webapp/</resource>
    

    Unable to find resource 'archetype-resources/src/main/webapp/'
    

    fileSet 目录 archetype-metadata.xml 对我不起作用:

    <fileSet filtered="true" encoding="UTF-8">
     <directory>src/main/webapp/</directory>
    </fileSet>
    

    我使用下面的maven原型插件创建我的自定义原型。

    mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-5:create
    

    还有别的办法吗?还是我错过了什么?谢谢

    3 回复  |  直到 11 年前
        1
  •  20
  •   Pascal Thivent    14 年前

    我做了个快速测试…这对我有效。首先,我创建了一个原型:

    $ mvn archetype:generate -B -DarchetypeArtifactId=maven-archetype-archetype \
                                -DgroupId=com.stackoverflow \
                                -DartifactId=Q2786966 \
                                -Dversion=1.0-SNAPSHOT \
    

    我重新命名了 archetype.xml 进入之内 archetype-metadata.xml (前者用于原型1.0.x,后者用于原型2.0.x)因此项目看起来像:

    $ tree .
    .
    ├── pom.xml
    └── src
        └── main
            └── resources
                ├── archetype-resources
                │   ├── pom.xml
                │   └── src
                │       ├── main
                │       │   └── java
                │       │       └── App.java
                │       └── test
                │           └── java
                │               └── AppTest.java
                └── META-INF
                    └── maven
                        └── archetype-metadata.xml
    

    原型元数据.xml 包含:

    <?xml version="1.0" encoding="UTF-8"?>
    <archetype-descriptor name="Q2786966">
      <fileSets>
        <fileSet filtered="true" encoding="UTF-8">
          <directory>src/main/webapp</directory>
        </fileSet>
        <fileSet filtered="true" packaged="true">
          <directory>src/main/java</directory>
          <includes>
            <include>**/*.java</include>
          </includes>
        </fileSet>
      </fileSets>
    </archetype-descriptor>
    

    然后我安装了原型并用它创建了一个项目:

    $ mvn install
    $ cd ~/tmp
    $ mvn archetype:generate -B -DarchetypeGroupId=com.stackoverflow \
                                -DarchetypeArtifactId=Q2786966 \
                                -DarchetypeVersion=1.0-SNAPSHOT \
                                -DgroupId=my.group \
                                -DartifactId=my-artifact \
                                -Dversion=1.0-SNAPSHOT
    

    最终的项目如下所示:

    $ tree my-artifact/
    my-artifact/
    ├── pom.xml
    └── src
        └── main
            ├── java
            │   └── my-group
            │       └── App.java
            └── webapp
    

    那里有空的webapp目录。

        2
  •  10
  •   isawk    12 年前

    通过将以下配置添加到原型pom.xml构建配置中,我解决了这个问题。

    假设archetype-metadata.xml配置文件的文件集如下:

    <fileSet encoding="UTF-8">
     <directory>src</directory>
      <includes>
       <include>**/**</include>
      </includes>
    </fileSet>
    

    将它添加到pom.xml中,而不是原型中包含的,实际的项目pom.xml

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-resources-plugin</artifactId>
      <version>2.3</version>
      <configuration>
        <includeEmptyDirs>true</includeEmptyDirs>
      </configuration>
    </plugin>
    

    执行此功能的xml配置行是

    <includeEmptyDirs>true</includeEmptyDirs>
    

    完整配置如下

    <project ...>
    ...
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>2.3</version>
                    <configuration>
                        <includeEmptyDirs>true</includeEmptyDirs>
                    </configuration>
                </plugin>
    
            </plugins>
        </build>
    
    </project>
    
        3
  •  5
  •   Community Ian Goodfellow    7 年前

    我遇到了同样的问题 question . 重新配置maven资源插件。

    根据这张票mresources-36,应该有< includeEmptyDirs> 元素,但仅适用于Maven资源插件2.3。

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-resources-plugin</artifactId>
      <version>2.3</version>
      <configuration>
        <includeEmptyDirs>true</includeEmptyDirs>
      </configuration>
    </plugin>