写在前面:
个人的开发能力和开发水平都比较普通,最近突然心血来潮,想了解一下,中间件是怎么样的,为什么应用可以单独部署运行,目前开发的代码,怎么形成一个独立的小框架或者小应用,jar包,或者应用程序exe是怎么开发的。大概几年前了解过maven的创建,于是本次就直接从这个入手,maven的项目是怎么一步步发布成独立的jar包的。本内容非常基础,因为我也是零基础,只是记录一下本次的过程。
下面我们正式开始:
一、新建maven项目
打开idea,选择新建项目(我没有重新安装maven,一切都是使用默认的 配置,jdk版本使用的是1.8)。:
点击项目之后,弹出以下界面,然后选择maven,然后点击下一步
然后在这个界面输入自定义的名称即可。本次我测试的项目是maven_post
新建之后,会出现如下目录:
二、新建主类:
新建主类有两个注意点:
第一个:我目前还不知道为什么要新建主类,但是是必须要。我猜测应该是运行的一个入口,如果是服务类的,则需要运行一个框架,如果是应用类的,可能是写打开一个界面之类的,可以理解为什么必须要,但是不太清楚细节。
第二个:主类的必须要有一个包名,不能在java文件夹下面直接新建,不然的话会报错的
操作步骤:选择java文件夹->右键->软件包,本次我以com.demo为例
建完之后如下图所示:
然后选中这个文件夹,新建java类,主类代码如下,注解是必须的;这时候可能会报错。因为环境下面没有这个jar包。
package com.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
三、增加依赖
这时候maven的作用就出来了,按照之前的开发,我们需要找到对应的jar包,加载到当前项目;但是现在有maven,我们配置一下即可。
我们可以在工程下面看到这个文件:
下一步,我们直接修改这个配置文件,加入以下内容:其实这步就相当于导包了,修改这个文件的话,应该会有一个小 弹窗,点击之后,会自动下载jar包,并且加到当前项目中。
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.13</version>
</dependency>
<!-- Spring Boot Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.5.5</version>
</dependency>
<!-- Spring Boot Starter Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.5.5</version>
</dependency>
</dependencies>
加完之后如下图所示:
小按钮如下,点击蓝色的那个图标,等待下载完成即可。
此时,主类应该没有报错了。
四、新增接口
本次写的是一个简单的post接口;新建的路径和主类的路径一样(我没有试过放在其他路径的,不过感觉效果应该是一样的);
类代码如下:
package com.demo;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api")
public class PostController {
@PostMapping("/post")
public String createPost(@RequestBody String postBody) {
// 处理 post 接口逻辑
return "传入的内容为:"+postBody;
}
}
至此,开发内容完成,我们开始执行导包的操作;我先分享一下我最后成功的方式:
五、新增导包配置
修改pom.xml文件,加入以下内容:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<!-- 此处指定main方法入口的class -->
<mainClass>com.demo.Application</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
六、项目结构配置
待maven更新之后,进入项目结构的配置
这里选择工件:
注意:1、主类选择我们前面创建的主类。
2、目录需要选择项目的根目录,不能选择默认目录,不然会出问题。
点击确定之后,会出现以下界面:然后点击应用-确定即可。
七、开始构建工程
找到以下位置,进行工程构建。
选择重新构建,或者构建都可以:
构建完毕之后,项目会多出这两个文件夹:
接下来,我们就可以对这个jar包执行命令了。
八、启动导出的工程
先进到本地的目录;
执行以下命令
执行之后出现以下的效果:
证明已经成功启动。
(如果想用其他的方式进行导出,需要靠个人摸索了,例如形成bat文件,或者说导出成exe都是可以的,就要去了解对应的插件,然后去使用插件生成。)
九、工程测试
此时我们对post接口进行简单的测试。打开postman等随便一个接口工具。
输入对应的地址和代码的配置的后缀,可以看到请求返回内容成功。
此时我们观察后台控制台;
证明已经完全OK;
十、其他问题(希望有人可以解答一下我的疑问)
1、尝试过使用自带的maven构建,能导出jar包,但是执行java-jar jar包时,发现工程会有以下报错,根据网上提供的方法,试过很多种方式,未能解决。(具体操作-maven窗口-生命周期-package命令)
java.lang.IllegalArgumentException: No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.
2、也尝试过使用CMD,执行类似mvn clean package,最开始是提示mvn命令不存在,但是去其他地方执行又能正确显示mvn版本。或者有时候提示编译jdk没有指定,但是环境变量都已经进行了配置;不知道为什么。
3、当我使用的是其他内容作为主类是,不存在问题点1、2;就是说,我的主类内容,是使用jframe创建一个窗口之类的,jar包就能成功执行,并不会报错。估计还是一些配置或者坑的问题我并不了解。
十一、个人总结:
根据我这次的相关操作,可能自身存在以上几个原因或者缺点;
1、对maven相当不熟悉,对maven引用的插件也不熟悉。只是自己摸索,先把效果做出来。
2、对新的插件,只知道从网上复制粘贴,不知道在pom.xml上面为什么要这样配置。缺乏一个入手了解的渠道。也想请教一些老前辈,遇到这部分问题时,各位有什么好的学习方法进行推荐。
3、说白了本次的搭建仍热时对工具和插件的运用,如果真的想写一个接口的中间件,一个真正的开发需要做的核心内容我还是完全做不到的,只是小打小闹玩一下,记录下本次分享。
版权归原作者 如清Lee 所有, 如有侵权,请联系我们删除。