- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Maven 生成打包可执行jar包的方法步骤由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
最近IDEA打可执行Jar包搞了三天,一直失败,好好学习一下Maven-assembly,在此记录一下 。
1. 需求 。
项目打包,满足以下要求:
1.整个项目打一个Zip包下面包括应用程序、应用程序依赖的jar包、说明文档 2.项目打的jar包可以执行不同类里的Main函数 3.项目源码打的jar包要与依赖的第三方jar包分开 4.项目里的执行脚本也要一块打包并进行分类 5.document目录下的readme.txt放在压缩包的根目录下,其他的还放在这个目录下 6.打的jar包去掉不需要的目录(文件) 。
2. 开发环境 。
IDEA-2016 Maven3.3.9 。
项目的目录结构:
3. Maven打包插件介绍 。
assembly翻译过来就是组装、装配的意思 Maven对项目打包常用的打包插件有三种,分别是:
。
插件 | 功能 |
---|---|
maven-jar-plugin | maven 默认打包插件,用来创建 project jar |
maven-shade-plugin | 打可执行包,executable(fat) jar |
maven-assembly-plugin | 支持自定义打包方式 |
。
这里使用maven-jar-plugin和maven-assembly-plugin 项目目录:
每次找jar包之前先clean一下,不然的话IDEA会认为你的项目没有修改而不重新加载 。
另:配置文件的注释已经很详细了,这里就不另外再说明了 。
4. Maven使用maven-jar-plugin打可执行jar包 。
主要配置如下:
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
|
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-jar-plugin</
artifactId
>
<
version
>2.4</
version
>
<!-- 对要打的jar包进行配置 -->
<
configuration
>
<!-- Configuration of the archiver -->
<
archive
>
<!--生成的jar中,不要包含pom.xml和pom.properties这两个文件-->
<
addMavenDescriptor
>false</
addMavenDescriptor
>
<!-- Manifest specific configuration -->
<
manifest
>
<!--是否要把第三方jar放到manifest的classpath中-->
<
addClasspath
>true</
addClasspath
>
<!--生成的manifest中classpath的前缀,
因为要把第三方jar放到lib目录下,
所以classpath的前缀是lib/-->
<
classpathPrefix
>lib/</
classpathPrefix
>
</
manifest
>
</
archive
>
<!--过滤掉不希望包含在jar中的文件-->
<
excludes
>
<!-- 排除不需要的文件夹(路径是jar包内部的路径) -->
<
exclude
>**/assembly/</
exclude
>
</
excludes
>
</
configuration
>
</
plugin
>
|
完整配置见底部 。
5. Maven使用maven-assembly-plugin装需要打包的文件打进zip包 。
pom.xml下的主要配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-assembly-plugin</
artifactId
>
<
version
>2.4</
version
>
<!-- 对项目的组装进行配置 -->
<
configuration
>
<!-- 指定assembly插件的配置文件所在位置 -->
<
descriptors
>
<
descriptor
>src/main/resources/assembly/package.xml</
descriptor
>
</
descriptors
>
</
configuration
>
<
executions
>
<
execution
>
<
id
>make-assembly</
id
>
<!-- 将组装绑定到maven生命周期的哪一阶段 -->
<
phase
>package</
phase
>
<
goals
>
<!-- 指定assembly插件的打包方式-->
<
goal
>single</
goal
>
</
goals
>
</
execution
>
</
executions
>
</
plugin
>
|
assembly插件的配置文件package.xml见底部 。
6. Maven生成可执行jar包及zip项目压缩包 。
双击执行mvn:package会生成两个包:可执行jar包和项目压缩包,因为assembly的装配配置的是绑定到这上面来的 双击执行assembly:single只生成项目压缩包 。
这里执行mvn:package 。
解压后的项目压缩包目录结构:
7. 执行jar包 。
解压缩生成的项目包 TestString的源码:
1
2
3
4
5
6
|
public
class
TestString {
public
static
void
main(String[] args) {
String[] arr =
new
String[]{
"aaa"
,
"bbb"
,
"ccc"
,
"DDD"
,
"EEE"
,
"FFF"
};
System.out.println(StringUtils.join(arr,
"---"
));
}
}
|
TestNumber的源码:
1
2
3
4
5
6
|
public
class
TestNumber {
public
static
void
main(String[] args) {
Integer[] arr =
new
Integer[]{
11
,
22
,
33
,
44
,
55
,
66
};
System.out.println(StringUtils.join(arr,
"---"
));
}
}
|
命令行运行生成的jar 。
1
2
|
java -classpath dong.jar com.dong.bigdata.TestString
java -classpath dong.jar com.dong.bigdata.TestNumber
|
运行结果:
8. pom.xml配置 。
包含两个文件: pom.xml整体的配置 package.xml包含在pom.xml中,用于指定assembly装配时的配置 。
pom.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
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
project
xmlns
=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation
=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<
modelVersion
>4.0.0</
modelVersion
>
<!-- ####################### 基础设置 ###################### -->
<!--groupId:项目或者组织的唯一标志,并且配置时生成路径也是由此生成,如org.myproject.mojo生成的相对路径为:/org/myproject/mojo-->
<
groupId
>com.dong</
groupId
>
<!--项目的通用名称-->
<
artifactId
>bigdata</
artifactId
>
<!--打包机制,如pom,jar,maven-plugin,ejb,war,ear,rar,par-->
<
packaging
>jar</
packaging
>
<!--项目的版本-->
<
version
>1.0-SNAPSHOT</
version
>
<!-- ####################### 项目信息 ###################### -->
<!--用户描述项目的名称,无关紧要的东西-->
<
name
>bigdata</
name
>
<!--写明开发团队的网站,无关紧要-->
<
url
>http://http://www.dong.com/.com</
url
>
<!-- ####################### 环境设置 ###################### -->
<
properties
>
<!-- 项目执行脚本目录 -->
<
project.script.execute.directory
>src/main/scripts/execute</
project.script.execute.directory
>
<!-- 项目说明文档目录 -->
<
project.document.directory
>document</
project.document.directory
>
<!-- 项目配置文件目录 -->
<
project.config.directory
>src/main/resources</
project.config.directory
>
<!-- 项目编码 -->
<
project.build.sourceEncoding
>UTF-8</
project.build.sourceEncoding
>
<!-- 本地编译JDK版本 -->
<
maven.compiler.source
>1.8</
maven.compiler.source
>
<!-- 项目部署JDK版本 -->
<
maven.compiler.target
>1.8</
maven.compiler.target
>
</
properties
>
<!--
配置Maven的仓库, 在此处配置的仓库会优先于setting.xml里配置的仓库,
建议哪个仓库快,哪个配置在前面, 然后如果Maven在前面配置的仓库找不到的话会去后面的仓库找,
如果后面的仓库都找不到,会去setting.xml中央仓库里找
-->
<
repositories
>
<!-- 阿里云仓库,配置Maven仓库,速度快配置在最前面 -->
<
repository
>
<
id
>aliyun</
id
>
<
url
>http://maven.aliyun.com/nexus/content/groups/public</
url
>
</
repository
>
<!-- 国内备选仓库 -->
<
repository
>
<
id
>repo2</
id
>
<
url
>http://repo2.maven.org/maven2/</
url
>
</
repository
>
<!-- Cloudera仓库,如果在阿里云仓库里找不到去Cloudera的仓库里找,主要是CDH版本Hadoop依赖的jar -->
<
repository
>
<
id
>cloudera</
id
>
<
url
>https://repository.cloudera.com/artifactory/cloudera-repos/</
url
>
</
repository
>
<!-- Scala仓库,如果前面两个都找不到来仓库找,如果此仓库也找不到,去中央仓库找 -->
<
repository
>
<
id
>scala-tools.org</
id
>
<
name
>Scala-Tools Maven2 Repository</
name
>
<
url
>http://scala-tools.org/repo-releases</
url
>
</
repository
>
</
repositories
>
<
dependencies
>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<
dependency
>
<
groupId
>org.apache.commons</
groupId
>
<
artifactId
>commons-lang3</
artifactId
>
<
version
>3.4</
version
>
</
dependency
>
</
dependencies
>
<
build
>
<
finalName
>dong</
finalName
>
<
plugins
>
<!-- The configuration of maven-jar-plugin -->
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-jar-plugin</
artifactId
>
<
version
>2.4</
version
>
<!-- 对要打的jar包进行配置 -->
<
configuration
>
<!-- Configuration of the archiver -->
<
archive
>
<!--生成的jar中,不要包含pom.xml和pom.properties这两个文件-->
<
addMavenDescriptor
>false</
addMavenDescriptor
>
<!-- Manifest specific configuration -->
<
manifest
>
<!--是否要把第三方jar放到manifest的classpath中-->
<
addClasspath
>true</
addClasspath
>
<!--
生成的manifest中classpath的前缀,
因为要把第三方jar放到lib目录下,
所以classpath的前缀是lib/
-->
<
classpathPrefix
>lib/</
classpathPrefix
>
</
manifest
>
</
archive
>
<!--过滤掉不希望包含在jar中的文件-->
<
excludes
>
<!-- 排除不需要的文件夹(路径是jar包内部的路径) -->
<
exclude
>**/assembly/</
exclude
>
</
excludes
>
</
configuration
>
</
plugin
>
<!-- The configuration of maven-assembly-plugin -->
<
plugin
>
<
groupId
>org.apache.maven.plugins</
groupId
>
<
artifactId
>maven-assembly-plugin</
artifactId
>
<
version
>2.4</
version
>
<!-- 对项目的组装进行配置 -->
<
configuration
>
<!-- 指定assembly插件的配置文件所在位置 -->
<
descriptors
>
<
descriptor
>src/main/resources/assembly/package.xml</
descriptor
>
</
descriptors
>
</
configuration
>
<
executions
>
<
execution
>
<
id
>make-assembly</
id
>
<!-- 将组装绑定到maven生命周期的哪一阶段 -->
<!--<phase>package</phase>-->
<
goals
>
<!-- 指定assembly插件的打包方式-->
<
goal
>single</
goal
>
</
goals
>
</
execution
>
</
executions
>
</
plugin
>
</
plugins
>
</
build
>
</
project
>
|
9. package.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
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
|
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
assembly
>
<
id
>full</
id
>
<!-- 最终打包成一个用于发布的zip文件 -->
<
formats
>
<
format
>zip</
format
>
</
formats
>
<!-- 把依赖jar包打包进Zip压缩文件的lib目录下 -->
<
dependencySets
>
<
dependencySet
>
<!--不使用项目的artifact,第三方jar不要解压,打包进zip文件的lib目录-->
<
useProjectArtifact
>false</
useProjectArtifact
>
<!-- 第三方jar打包进Zip文件的lib目录下, -->
<!-- 注意此目录要与maven-jar-plugin中classpathPrefix指定的目录相同, -->
<!-- 不然这些依赖的jar包加载到ClassPath的时候会找不到-->
<
outputDirectory
>lib</
outputDirectory
>
<!-- 第三方jar不要解压-->
<!--<unpack>false</unpack>-->
</
dependencySet
>
</
dependencySets
>
<!-- 文件设置,你想把哪些文件包含进去,或者把某些文件排除掉,都是在这里配置-->
<
fileSets
>
<!-- 把项目自己编译出来的可执行jar,打包进zip文件的根目录 -->
<
fileSet
>
<
directory
>${project.build.directory}</
directory
>
<
outputDirectory
></
outputDirectory
>
<
includes
>
<
include
>*.jar</
include
>
</
includes
>
</
fileSet
>
<!--
把项目readme说明文档,打包进zip文件根目录下
(这里针对目录document/readme.txt文件)
${projet.document.directory}是pom.xml中自己配置的
-->
<
fileSet
>
<
directoryl
>${projet.document.directory}</
directoryl
>
<
outputDirectory
></
outputDirectory
>
<
includes
>
<
include
>readme.*</
include
>
</
includes
>
</
fileSet
>
<!--
把项目相关的说明文档(除了readme文档),
打包进zip文件根目录下的document目录
(这里针对document/exclode.txt文件)
${project.document.directory}是在pom.xml中自己配置的
-->
<
fileSet
>
<
directory
>${project.document.directory}</
directory
>
<
outputDirectory
>document</
outputDirectory
>
<
excludes
>
<
exclude
>readme.*</
exclude
>
</
excludes
>
</
fileSet
>
<!--
把项目的脚本文件目录(src/main/scripts )中的启动脚本文件,
打包进zip文件的根目录
(这里针对的是src/scripts/execute/include-file.sh文件)
${project.script.execute.directory}
-->
<
fileSet
>
<
directory
>${project.script.execute.directory}</
directory
>
<
outputDirectory
></
outputDirectory
>
<
includes
>
<
include
>*</
include
>
</
includes
>
</
fileSet
>
</
fileSets
>
</
assembly
>
|
到此这篇关于Maven 生成打包可执行jar包的方法步骤的文章就介绍到这了,更多相关Maven 生成可执行jar 内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://blog.csdn.net/daerzei/article/details/82883472 。
最后此篇关于Maven 生成打包可执行jar包的方法步骤的文章就讲到这里了,如果你想了解更多关于Maven 生成打包可执行jar包的方法步骤的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!