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

时间:2010-05-07 07:38:46

标签: maven-2 maven-archetype

此方法存在一个问题,位于Codehaus JIRA #ARCHETYPE-57,但此故障单中列出的所有说明均未通过。 marekdec How to get maven archetype to generate empty directories的博文也不适合我。

结尾archetype.xml的{​​{1}}中的技巧对我不起作用:

/

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

Unable to find resource 'archetype-resources/src/main/webapp/' 中的fileSet目录也不适用于我:

archetype-metadata.xml

我使用以下maven-archetype-plugin来创建我的自定义原型。

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

还有其他解决方案吗?还是我错过了什么?感谢

3 个答案:

答案 0 :(得分:21)

我做了一个快速测试......它对我有用。首先,我创建了一个原型:

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

我将archetype.xml重命名为archetype-metadata.xml(前者为Archetype 1.0.X,后者为Archetype 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

archetype-metadata.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目录就在那里。

答案 1 :(得分:10)

我通过将以下配置添加到archetypes 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>

答案 2 :(得分:5)

我对这个question的第一个答案遇到了同样的问题。重新配置maven-resources-plugin。

根据此票MRESOURCES-36,应该有一个&lt; includeEmptyDirs>元素,但仅适用于Maven Resources Plugin 2.3。

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