1.因为现在很多服务不在用笨重的web容器进行启动,只需要使用自身带的容器就可以将服务启动起来,在服务器部署上不需要再单独布置web应用来增加服务器的额外开销,只需要直接启动jar包就可以将服务启动起来,比较方便。现在比较经典的框架比如Spring家族系列,Spring就自身带有Spring容器,就可以独自加载配置,还有阿里巴巴的Dubbo框架,内部集成多个容器,比如Spring容器log4j容器和logback容器等,根本不需要再再额外的提供容器来增加开销,只需要打成jar包,直接执行命令(java -jar xxx.jar)就可以将项目运行起来,当然构建项目得提供一个入口的main方法,这样执行命令的时候程序才会去根据配置去寻找入口地址,有兴趣的可以看看dubbo的源码和springboot的源码,这两个框架都是直接启动并且内部集成了多个容器。
2.可执行jar的构建
--这节给大家介绍一点自己构建可执行jar项目的总结,当时走了很多弯路,当时各种百度,google都没有找到我想要的东西。因为不是把项目打成jar就能执行的,即使里面有main方法,在执行java -jar xxx.jar的时候也不一定可以找到,就算找到了,也不一定执行正确,因为在配置的时候,我们需要一些列的配置来让项目在进行打包操作时候生成可以让其jar包正确执行的配置文件和编译文件需要放置的哪个目录下,还有就是main方法的入口配置,执行java命令的时候,他去哪里找mian方法我们也得自己去配置,还有就是项目中的配置文件需要在打包时,打到哪里等等,这些都是我们要考虑的问题,只有将这些问题全部考虑到了之后,在打包之后,执行java -jar xxx.jar才会正确的执行jar
--通过构建一个最简单的HelloWolrd!例子来理解可执行jar文件。
1.在eclipse上构建一个maven项目,我就直接取名HelloWorld,名字你们任意取。注意不是web项目,因为web项目最后打成是一个war包,我们需要jar包,所以只需要构建一个普通的java项目。
2.打开项目的pom文件我们先将里面的junit依赖的版本修改成4.11,因为3.X的版本不支持注解,虽然项目中我们没有用到测试但是,我本人习惯。
3.我们只是构建一个最简单的项目来解说可执行jar包的构建方法。
4.我们建一个包路径com.java,建一个测试类我给取名为TestMain,你们这些都可以随便取,根据自己喜好。
5.TestMain类里面只有一个mian方法
public class TestMain {
public static void main(String[] args) {
System.out.println("HelloWorld!!!!!");
}
}
6.我们先什么都不配置直接打成jar包,然后执行一下试试,看看能否输出HelloWorld!!!!!
7.maven的打包命令:mvn clean install -Dmaven.test.skip=true 注意:这条命令必须在项目目录下的pom文件的所在目录下执行,这个大家都应该知道吧。
8.编译之后再当前目录的target目录下会生成一个HelloWorld-0.0.1-SNAPSHOT.jar文件(这是我的jar文件,你要是取的项目名不是helloworld那就是别的名字),大家也都知道编译之后所生成的jar包在哪里吧,我就不说了,进入所生成的jar包的文件目录下,执行java -jar HelloWorld-0.0.1-SNAPSHOT.jar 不出意外的话会报错:HelloWorld-0.0.1-SNAPSHOT.jar中没有主清单属性 ,然后你们把这个错误粘贴到网上会看见各种大神给你们解答,结果好像都是一样的答案,具体说的行不行我也没有验证,因为我觉得不靠谱,我项目里面要是几十个jar包相互依赖,我还得一个个往他们所说的那个MANIFEST.MF文件里面加,那不是得疯了,再说完事之后好不好用还两说,所以我就没用,其实maven提供了更友好的方式,这么大的漏洞maven怎么可能出现呢。
9.HelloWorld-0.0.1-SNAPSHOT.jar中没有主清单属性:这个错误是什么意思呢?字面意思,没有主类的清单,也就是说找不到主类,执行jar的时候要有执行的入口,所以他找不到,才会报错 ,我们要给他提供主类的入口。所以我们在打包之前要对maven的打包命令的插件进行配置,让他标记jar,并且记录主类的地址,这pom文件中添加下面的插件,插件介绍参见官方地址:http://maven.apache.org/plugins/maven-jar-plugin/
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <!-- 定义主类的入口地址就是TestMain的全路径--> <mainClass> com.java.TestMain </mainClass> </manifest> </archive> </configuration> </plugin>
10.添加之后再执行打包命令:mvn clean install -Dmaven.test.skip=true
11.打包成功之后再进入target目录下执行命令:java -jar HelloWorld-0.0.1-SNAPSHOT.jar 就会在控制台打出:HelloWorld!!!!!
12.※上面只是一个最简单的配置,进入上面提供的网址可以找到这个插件的所有配置,如果这个项目里面还有很多依赖的第三方jar你就要配置插件在打包时候将涉及到的第三方jar打到制定的目录下和将这些jar包标记到MANIFEST.MF里面
--总结
1.就是一个简单的插件使用,但是在网上很少看见对maven插件的解释,因为我们平时很少去构建项目,特别是构建大型的项目,我第一次构建这种可执行jar项目的时候也一脸懵逼,无从下手,网上乱搜,发现网上全是坑,后来也就放弃了,看他们的还不如自己找答案。正好现在有两个典型的jar运行项目的框架,一个是springboot,还有一个就是做分布式开发的dubbo框架,也是比较幸运,我做了一年多的dubbo开发,对dubbo比较熟悉,源码也大略的看过几遍,所以就查找dubbo的pom文件,首先就是dubbo的容器所在的pom文件,然后看他的父项目pom文件,还真查到了maven-jar-plugin插件,然后在网上查,进入官网,终于知道这个插件就是我想要的,再根据dubbo的容器启动配置,所以知道了这个插件的大概用法,就是构建可执行jar的必须插件,还有其他几个也是构建可执行jar的必须插件,只是方向不同,这个是打包jar和配置执行main方法入口的。
2.另一个执行jar的就是springboot他我也看了一下源码,看了一下他的pom文件下的插件配置,只是springboot的这个插件进行了包装 spring-boot-maven-plugin 建springboot项目时,只要加这个依赖就可以了,打包的时候自然会直接变成可执行的jar
3.但是不管怎么样,最后结果都是一样的。希望对你们有所帮助。
格式格式化的不好,看着不是很方便,请下载附件。
相关推荐
6. **可执行JAR的注意事项**:确保所有的依赖库都已被正确包含,如果使用“fat”JAR,注意可能存在的类冲突问题。另外,资源文件(如配置文件)也需要正确地打包到JAR中。 以上就是使用Maven 3打包可运行JAR文件的...
** Maven 可执行程序文档与Java环境** Maven是一个强大的项目管理和构建工具,在Java开发中广泛应用。它通过读取项目的配置文件(pom.xml),自动管理项目的依赖关系,构建工件(如JAR或WAR文件),并执行测试。在...
6. **安装NetBeans Maven插件**: - NetBeans IDE支持的Maven插件。 - 提供了Maven项目的创建、构建和调试等功能。 - 可以通过NetBeans的插件管理器安装。 7. **Maven安装最佳实践**: - 定期更新Maven版本。 ...
例如,maven-compiler-plugin的compile目标用于编译源代码,而maven-jar-plugin的jar目标则用于创建可执行的jar包。通过配置插件的目标,Maven可以灵活地定制构建流程。 ### 多模块项目 Maven支持多模块项目,允许...
总的来说,Maven提供了一种统一的、标准化的方式来管理和构建Java项目,通过POM文件和构建生命周期的概念,极大地提高了开发效率和项目的可维护性。了解并掌握Maven的基础知识,将有助于开发者更好地融入Java开发...
同时,Maven的生命周期和插件机制使得构建过程可高度定制化。 总结来说,Maven是Java开发者的得力助手,通过它可以简化项目构建过程,统一项目配置,高效管理依赖。学习和熟练使用Maven,能显著提高开发效率,使...
开发人员通过命令行或IDE插件,执行对应的生命周期目标(如mvn install),即可完成相应的构建任务。 4. **依赖管理** Maven提供了一套依赖管理机制,可以自动下载和管理项目所需依赖的库文件。开发者只需在POM....
Maven插件是实现特定构建任务的组件,如编译、测试、打包、部署等。通过<build><plugins>标签配置插件及其配置,如maven-jar-plugin用于生成JAR文件。 总结,Maven的使用能够极大地提升开发效率,通过规范化的项目...
8. **插件生态**:Maven拥有丰富的插件生态系统,可以扩展至项目过程中的各种需求,如生成可执行文件、与版本控制系统集成等。 【Maven设计原则】 1. **约定优于配置**:Maven设定了默认的项目目录结构和生命周期...
MAVEN_HOME”环境变量,指向 Maven 的安装目录。例如,如果你将 Maven 解压缩到 C:\Program Files\Apache ...随着 Maven 的不断发展,它已经成为 Java 开发不可或缺的一部分,大大提升了开发效率和项目协作的便利性。
Maven通过插件执行构建任务,如编译、测试、打包等。插件通过goals与生命周期阶段关联,扩展了Maven的功能。 ### Maven3的主要改进 1. **更高效的依赖解析** Maven3引入了新的依赖解析机制,提高了处理多模块...
- `bin`:包含了执行Maven命令的可执行脚本。 ### 2. 配置环境变量 为了让系统能够全局访问Maven,你需要设置两个环境变量: - `MAVEN_HOME`:指向Maven的安装目录。 - `PATH`:添加`%MAVEN_HOME%\bin`(Windows...
Maven插件扩展了Maven的功能,用于执行特定的任务,如编译Java代码、生成Javadoc、执行测试等。例如,`maven-jar-plugin`用于创建JAR文件,`maven-compiler-plugin`负责编译源代码。 **四、archetype-catalog.xml**...
** Maven2 快速入门教程 ** Maven是Apache软件基金会开发的一款项目管理和集成工具,主要应用于Java项目。Maven2是Maven的第一个稳定版本,它极大地简化了项目的构建、依赖管理和文档生成过程。本教程将带你一步步...
通过以上知识点的介绍,可以看出 Maven 不仅能够简化项目的构建流程,还能够提高开发效率,减少出错几率,是现代 Java 开发不可或缺的工具之一。对于初学者来说,熟练掌握 Maven 的基础知识和常用命令是非常重要的。...
4. **插件 (Plugins)**: Maven 使用插件执行构建任务,如编译、测试、打包、部署等。每个插件都有自己的目标(goal),可以通过配置来定制行为。 5. **仓库 (Repository)**: Maven 使用本地仓库存储下载的依赖,同时...
### Maven实战(入门篇):全面解析Maven的构建、依赖与项目信息管理 #### Maven:构建、依赖与信息管理的全能工具 Maven,源自于希伯来语中的“Baal ha-ne'emânîm”,意指知识的积累、专家或是内行,是一个由...