Skip to content

Commit a5c396a

Browse files
authored
Add files via upload
1 parent d8e6254 commit a5c396a

File tree

2 files changed

+152
-0
lines changed

2 files changed

+152
-0
lines changed
41.4 KB
Loading

java日常/java-maven打包学习.md

+152
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
# java-maven打包学习
2+
3+
>之前提供spring写了一个shiro扫描key的工具,可惜简单的打包好像不行,因为有依赖包等等,因为我是提供spring框架提供的web服务去扫描的。今天就来填坑。。。。
4+
5+
之前的打包一运行就报错。。非常难受。然后百度了一下原来是因为没有配置META-INF文件,所以在启动jar的时候找不到主类。而META-INF文件里面就配置了jar启动的主类和其他信息(Class-Path)。所以可以理解为启动jar的时候先去META-INF文件里面读配置然后执行java代码。你没有配置当然找不到主类咯。
6+
7+
然后就是来学习maven打包方式。
8+
9+
### maven命令
10+
11+
1、mvn compile 编译,将Java 源程序编译成 class 字节码文件。
12+
13+
2、mvn test 测试,并生成测试报告
14+
15+
3、mvn clean 将以前编译得到的旧的 class 字节码文件删除
16+
17+
4、mvn pakage 打包,动态 web工程打 war包,Java工程打 jar 包。
18+
19+
5、mvn install 将项目生成 jar 包放在仓库中,以便别的模块调用
20+
21+
6、mvn clean install -Dmaven.test.skip=true 抛弃测试用例打包
22+
23+
### 配置一
24+
25+
使用maven-jar-plugin和maven-dependency-plugin插件打包
26+
27+
通过**mvn package**指令打包
28+
29+
```xml
30+
31+
<build>
32+
<plugins>
33+
34+
<plugin>
35+
<groupId>org.apache.maven.plugins</groupId>
36+
<artifactId>maven-jar-plugin</artifactId>
37+
<version>2.6</version>
38+
<configuration>
39+
<archive>
40+
<manifest>
41+
<addClasspath>true</addClasspath>
42+
<classpathPrefix>lib/</classpathPrefix>
43+
<mainClass>com.xxg.Main</mainClass>
44+
</manifest>
45+
</archive>
46+
</configuration>
47+
</plugin>
48+
<plugin>
49+
<groupId>org.apache.maven.plugins</groupId>
50+
<artifactId>maven-dependency-plugin</artifactId>
51+
<version>2.10</version>
52+
<executions>
53+
<execution>
54+
<id>copy-dependencies</id>
55+
<phase>package</phase>
56+
<goals>
57+
<goal>copy-dependencies</goal>
58+
</goals>
59+
<configuration>
60+
<outputDirectory>${project.build.directory}/lib</outputDirectory>
61+
</configuration>
62+
</execution>
63+
</executions>
64+
</plugin>
65+
</plugins>
66+
</build>
67+
```
68+
69+
maven-jar-plugin用于生成META-INF/MANIFEST.MF文件的部分内容,
70+
71+
<mainClass>com.xxg.Main</mainClass>指定MANIFEST.MF中的Main-Class,
72+
73+
<addClasspath>true</addClasspath>会在MANIFEST.MF加上Class-Path项并配置依赖包,
74+
75+
<classpathPrefix>lib/</classpathPrefix>指定依赖包所在目录。
76+
77+
78+
79+
### 配置二
80+
81+
使用maven-assembly-plugin插件打包
82+
83+
通过**mvn package assembly:single**指令打包
84+
85+
```xml
86+
<build>
87+
<plugins>
88+
<plugin>
89+
<groupId>org.apache.maven.plugins</groupId>
90+
<artifactId>maven-assembly-plugin</artifactId>
91+
<version>2.5.5</version>
92+
<configuration>
93+
<archive>
94+
<manifest>
95+
<mainClass>com.xxg.Main</mainClass>
96+
</manifest>
97+
</archive>
98+
<descriptorRefs>
99+
<descriptorRef>jar-with-dependencies</descriptorRef>
100+
</descriptorRefs>
101+
</configuration>
102+
</plugin>
103+
</plugins>
104+
</build>
105+
```
106+
107+
### 配置三
108+
109+
使用maven-shade-plugin插件打包
110+
111+
通过**mvn package**指令打包
112+
113+
```xml
114+
115+
<build>
116+
<plugins>
117+
118+
<plugin>
119+
<groupId>org.apache.maven.plugins</groupId>
120+
<artifactId>maven-shade-plugin</artifactId>
121+
<version>2.4.1</version>
122+
<executions>
123+
<execution>
124+
<phase>package</phase>
125+
<goals>
126+
<goal>shade</goal>
127+
</goals>
128+
<configuration>
129+
<transformers>
130+
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
131+
<mainClass>com.xxg.Main</mainClass>
132+
</transformer>
133+
</transformers>
134+
</configuration>
135+
</execution>
136+
</executions>
137+
</plugin>
138+
139+
</plugins>
140+
</build>
141+
```
142+
143+
这里自己喜欢第二个方法,如果记不住可以设置代码块。。
144+
145+
![image-20210818111820181](img/image-20210818111820181.png)
146+
147+
>参考:
148+
>
149+
>https://blog.csdn.net/weixin_42248302/article/details/100886727
150+
>
151+
>https://blog.csdn.net/sdrfengmi/article/details/87191944
152+

0 commit comments

Comments
 (0)