Maven原型骨架及常见问题

本文介绍了在创建和使用Maven原型工程时遇到的常见问题,包括模块路径问题、文件内容未替换占位符、空文件夹不被包含,以及对应的解决方案。通过调整archetype-metadata.xml和使用特定Maven命令,可以解决这些问题。此外,还讲解了如何上传和使用自定义的Maven原型Jar包到Nexus私服库。
摘要由CSDN通过智能技术生成

关于Maven原型工程的制作就不在这里详细介绍了,具体细节请参考之前的文章: 定制Maven原型生成项目
下面分享制作和使用Maven原型工程时碰到的常见问题,以及原型的上传和使用方法。



1.模块路径问题

1.1 路径问题

在使用原型工程时会碰到下面的错误:

1
2
org.apache.maven.archetype.exception.ArchetypeGenerationFailure: 
Error merging velocity templates: Unable to find resource 'archetype-resources/__rootArtifactId__-aggregator/../__rootArtifactId__-common/pom.xml'

如果使用maven-archetype-plugin的2.0-alpha-4版,则在【第三步】从原型快速生成项目时才会报错;如果使用2.2版,则在【第二步】编译原型Jar包时就会报错。
出现这个问题的原因是我的工程的目录结构:


根目录下的pom.xml中定义module:

1
2
3
     < modules >
         < module >xyz-aggregator</ module >
     </ modules >

xyz-aggregator的pom.xml中定义module:

1
2
3
4
     < modules >
         < module >../xyz-common</ module >
         < module >../xyz-web</ module >
     </ modules >

也就是说实际上aggregator包含common和web工程,但目录结构上却是平级。这种结构比较扁平化,结构上比较清晰。
但Maven的archetype插件要求module中的路径与module名字必须一致。对于这个问题,Maven的JIRA上已经有人报告 issue了,但还未得到解决了。

1.2 元数据

碰到这种问题,我们使用2.0-alpha-4版的先生成出原型,再手动修改Archetype插件的元数据了。
在我们对原型工程执行archetype:create-from-project后,会在target目录下生成许多东西。

target/
└── generated-sources
    └── archetype
        ├── pom.xml
        └── src
            └── main
                └── resources
                    ├── archetype-resources
                    │   ├── __rootArtifactId__-aggregator
                    │   │   └── pom.xml
                    │   ├── __rootArtifactId__-common
                    │   │   ├── pom.xml
                    │   │   └── src
                    │   ├── __rootArtifactId__-web
                    │   │   ├── pom.xml
                    │   │   └── src
                    │   ├── pom.xml
                    │   └── quick-start.bat
                    └── META-INF
                        └── maven
                            ├── archetype.xml
                            └── archetype-metadata.xml

target/generated-sources/archetype就是我们从一个普通项目产生的原型。src存放的是原型项目的源码,其实就是将源项目中的项目名、包名等都替换为占位符。
要注意的是pom.xml中module间的包含关系都被去掉了,保存在了META-INF/maven/archetype-metadata.xml中,这个文件就是我们要修改的元数据。

这里介绍几个关键的结点。<fileset>是要包含的文件,filtered="true"表示该fileset中的文件在生成项目时要进行占位符替换。
<modules>里包含各个module及module中包含的fileset。

3.解决方案

针对module工程的路径问题,我们可以将common和web工程从<modules>中提取出来,作为普通的<fileset>文件进行占位符替换。
并将aggregator工程的pom.xml中的module手动添加上,因为Archetype插件是根据<modules>在生成项目时添加上module的。
(不太清楚为什么要在原型工程中把module都去掉,在生成时再重新添加上?)

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<? xml  version = "1.0"  encoding = "UTF-8"
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值