0


IDEA发布maven项目同时打包成jar包(包括依赖)

写在前面:
    个人的开发能力和开发水平都比较普通,最近突然心血来潮,想了解一下,中间件是怎么样的,为什么应用可以单独部署运行,目前开发的代码,怎么形成一个独立的小框架或者小应用,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、说白了本次的搭建仍热时对工具和插件的运用,如果真的想写一个接口的中间件,一个真正的开发需要做的核心内容我还是完全做不到的,只是小打小闹玩一下,记录下本次分享。
标签: intellij-idea maven jar

本文转载自: https://blog.csdn.net/sinat_37116144/article/details/134572101
版权归原作者 如清Lee 所有, 如有侵权,请联系我们删除。

“IDEA发布maven项目同时打包成jar包(包括依赖)”的评论:

还没有评论