首先,創(chuàng)建項(xiàng)目,創(chuàng)建一個(gè)文件夾:mkdir yakov
進(jìn)入yakov目錄,然后創(chuàng)建一個(gè)pom.xml:touch pom.xml,這個(gè)xml文件的結(jié)構(gòu)會(huì)在另外的章節(jié)詳細(xì)說一下。
使用vi編輯pom.xml,寫入基本的項(xiàng)目信息,如下圖:
單單是這些還是不夠的,接下來需要,配置一些私服和集成。
注:上面的version改為3.0
有關(guān)的私服和集成服務(wù)在上一篇中寫過:http://www.cnblogs.com/yakov/archive/2011/11/19/maven2_shi_jian.html
設(shè)置maven從nexus私服下載構(gòu)件
可以設(shè)置某個(gè)項(xiàng)目從私服下載,設(shè)置項(xiàng)目的pom.xml如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<project> ... <repositories> <repository> <id>nexus</id> <name>nexus</name> <url>http: //202.117.15.193:8010/nexus/content/groups/public/</url> <releases><enabled> true </enabled></releases> <snapshots><enabled> true </enabled></snapshots> </repository> </repositories> <pluginrepositories> <pluginrepository> <id>nexus</id> <name>nexus</name> <url>http: //202.117.15.193:8010/nexus/content/groups/public/</url> <releases><enabled> true </enabled></releases> <snapshots><enabled> true </enabled></snapshots> </pluginrepository> </pluginrepositories> ... </project> |
但是這需要為每個(gè)項(xiàng)目配置一下,有可能你僅僅需要為你開發(fā)的所有項(xiàng)目都用這同一個(gè)私服,那么很好,settings.xml提供了profile來設(shè)置:
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
|
<settings> ... <profiles> <profile> <id>nexus</id> <repositories> <repository> <id>nexus</id> <name>nexus</name> <url>http: //202.117.15.193:8010/nexus/content/groups/public/</url> <releases><enabled> true </enabled></releases> <snapshots><enabled> true </enabled></snapshots> </repository> </repositories> <pluginrepositories> <pluginrepository> <id>nexus</id> <name>nexus</name> <url>http: //202.117.15.193:8010/nexus/content/groups/public/</url> <releases><enabled> true </enabled></releases> <snapshots><enabled> true </enabled></snapshots> </pluginrepository> </pluginrepositories> </profile> </profiles> <activeprofiles> <activeprofile>nexus</activeprofile> </activeprofiles> ... </settings> |
上面的配置是針對(duì)下載構(gòu)件的,如果所有的下載都從私服上進(jìn)行,就需要配置鏡像了!如下所示:
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
|
<settings> ... <mirrors> <mirror> <id>nexus</id> <mirrorof>*</mirrorof> <url>http: //202.117.15.193:8010/nexus/content/groups/public/</url> </mirror> </mirrors> <profiles> <profile> <id>nexus</id> <repositories> <repository> <id>central</id> <url>http: //central</url> <releases><enabled> true </enabled></releases> <snapshots><enabled> true </enabled></snapshots> </repository> </repositories> <pluginrepositories> <pluginrepository> <id>central</id> <url>http: //central</url> <releases><enabled> true </enabled></releases> <snapshots><enabled> true </enabled></snapshots> </pluginrepository> </pluginrepositories> </profile> </profiles> <activeprofiles> <activeprofile>nexus</activeprofile> </activeprofiles> ... </settings> |
以上幾個(gè)任選一種就可以了,我這里使用了最后一種。
部署自己的構(gòu)件至nexus
直接在要部署的項(xiàng)目的pom.xml中寫入如下代碼:
還需要在settings.xml中設(shè)置用戶名和密碼,因?yàn)閚exus的倉庫對(duì)于匿名用戶是readonly的:
至此,有關(guān)私服已經(jīng)設(shè)置好了!
在目錄src/main/java下編寫plugin
在yakov下創(chuàng)建src/main/java目錄
寫一個(gè)yakovmojo的類:
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
import java.io.bufferedreader; import java.io.file; import java.io.filereader; import java.io.ioexception; import java.util.arraylist; import java.util.list; import org.apache.maven.model.resource; import org.apache.maven.plugin.abstractmojo; import org.apache.maven.plugin.mojoexecutionexception; import org.apache.maven.plugin.mojofailureexception; /** * * @author org.omylab.yakov * @goal yakov */ public class yakovmojo extends abstractmojo{ private final string[] includes_default={ "java" , "xml" , "properties" }; /** * @parameter expression="${project.basedir}" * @required * @readonly */ private file basedir; /** * @parameter expression ="${project.build.sourcedirectory}" * @required * @readonly */ private file sourcedirectory; /** * @parameter expression ="${project.biuld.testsourcedirectory}" * @required * @readonly */ private file testsourcedirectory; /** * @parameter expression ="${project.build.resources}" * @required * @readonly */ private list<resource> resources; /** * @parameter expression "${project.build.testresources}" * @required * @readonly */ private list<resource> testresources; /** * the file types which will be included for counting * * @parameter */ private string[] includes; public void execute() throws mojoexecutionexception, mojofailureexception{ if (includes== null ||includes.length== 0 ){ includes=includes_default; } try { countdir(sourcedirectory); countdir(testsourcedirectory); for (resource resource:resources){ countdir( new file(resource.getdirectory())); } for (resource resource:testresources){ countdir( new file(resource.getdirectory())); } } catch (ioexception e){ throw new mojoexecutionexception( "unable to count lines of code." ,e); } } private void countdir(file dir) throws ioexception{ if (!dir.exists()) return ; list<file> collected= new arraylist<file>(); collectfiles(collected,dir); int lines= 0 ; for (file sourcefile:collected){ lines+=countline(sourcefile); } string path=dir.getabsolutepath().substring(basedir.getabsolutepath().length()); getlog().info(path+ " : " +lines+ " lines of code in " +collected.size()+ " files" ); } private void collectfiles(list<file> collected,file file){ if (file.isfile()){ for (string include:includes){ if (file.getname().endswith( "." +include)){ collected.add(file); break ; } } } else { for (file sub:file.listfiles()){ collectfiles(collected,sub); } } } private int countline(file file) throws ioexception{ bufferedreader reader= new bufferedreader( new filereader(file)); int line = 0 ; try { while (reader.ready()){ reader.readline(); line++; } } finally { reader.close(); } return line; } } |
然后運(yùn)行mvn clean compile,運(yùn)行結(jié)果如下:
編譯完成,這里可移執(zhí)行安裝了,事實(shí)上,還應(yīng)該有對(duì)應(yīng)的測(cè)試代碼,以后再講。
運(yùn)行mvn clean install完后就安裝成功了。
最后運(yùn)行mvn clean deploy 完成發(fā)布,查看nexus如下:
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。