Daizc
count.articles52
count.tags25
count.categories3
搭建Maven脚手架时一些并不太常见的问题

搭建Maven脚手架时一些并不太常见的问题

使用脚手架生成的pom.xml中含有大量空白行

片段如下图,生成的xml含有大量空白行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<dependencies>
<dependency>


<groupId>com.alibaba</groupId>


<artifactId>fastjson</artifactId>


<version>1.2.79</version>


</dependency>
<dependency>


<groupId>com.google.guava</groupId>


<artifactId>guava</artifactId>


<version>31.0.1-jre</version>


</dependency>
<dependency>


<groupId>org.slf4j</groupId>


<artifactId>slf4j-ext</artifactId>


</dependency><!-- endregion -->


</dependencies>

参考资料

解决方案

这是maven-archetype-plugin插件的BUG,起因是maven-archetype-plugin:3.1.1使用Java XML API替换了dom4j用以生成xml,此行为导致不同的Java版本将会影响最终xml的生成结果。

最终解决方案就是换用maven-archetype-plugin:3.1.0及以下版本,或者使用Java8.

在项目中添加.gitignore文件

脚手架结构如下图所示,其中以.开头的隐藏文件均为包含在输出目录中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
xxx-archetype
|- .idea
|- src
| |- main
| |- resources
| |- archetype-resources
| | |- __rootArtifactId__-common
| | |- __rootArtifactId__-data
| | |- __rootArtifactId__-proxy
| | |- __rootArtifactId__-service
| | |- __rootArtifactId__-web
| | |- .editorconfig
| | |- .gitignore
| | |- .gitlab-ci.yml
| | |- Dockerfile
| | |- lombok.config
| | |- pom.xml
| |- META-INF
| |- maven
| |- archetype-metadata.xml
|- pom.xml

解决方式:

  • 修改pom.xml升级maven-archetype-plugin3.2.1版本,并设置变量useDefaultExcludes=false
    1
    2
    3
    4
    5
    6
    7
    8
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-archetype-plugin</artifactId>
    <version>3.2.1</version>
    <configuration>
    <useDefaultExcludes>false</useDefaultExcludes>
    </configuration>
    </plugin>
  • 修改pom.xml升级maven-resources-plugin3.2.0版本,并设置变量addDefaultExcludes=false
    1
    2
    3
    4
    5
    6
    7
    8
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.2.0</version>
    <configuration>
    <addDefaultExcludes>false</addDefaultExcludes>
    </configuration>
    </plugin>
  • archetype-metadata.xml中添加需要包含的文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <fileSets>
    <fileSet filtered="true" encoding="UTF-8">
    <directory/>
    <includes>
    <include>.editorconfig</include>
    <include>.gitignore</include>
    <include>Dockerfile</include>
    <include>lombok.config</include>
    <include>.gitlab-ci.yml</include>
    </includes>
    </fileSet>
    </fileSets>

在archetype-metadata.xml中启用代码提示 (适用于所有XML)

按照官方文档将namespace更新为1.1.0版本,并在idea中将光标指向xmlns链接点击获取外部资源即可。

1
2
3
4
5
6
<archetype-descriptor
xmlns="https://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0 http://maven.apache.org/xsd/archetype-descriptor-1.1.0.xsd"
name="xxxxx-archetype" partial="false">
</archetype-descriptor>

copyright.author:Daizc
copyright.permalink:https://note.bequick.run/%E6%90%AD%E5%BB%BAMaven%E8%84%9A%E6%89%8B%E6%9E%B6%E6%97%B6%E4%B8%80%E4%BA%9B%E5%B9%B6%E4%B8%8D%E5%A4%AA%E5%B8%B8%E8%A7%81%E7%9A%84%E9%97%AE%E9%A2%98/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可