maven项目打包运行的一些注意

现实生活中我们会常常创建一些小小的demo,对于这些小demo,我们可能并不需要用到springboot 或者spring MVC,比如我们仅仅就是数据库的对接把oracle的数据对接到mysql之类的。
那么让我们来创建一个小demo来尝试一下吧
file 》 new 》project 》 maven 》
在这里插入图片描述
最终生成的文件是这样的
在这里插入图片描述
那么我们就简单的创建一个Hello world 输出来尝试一下吧
在这里插入图片描述
那么本地的测试通过,我们如何来进行打包呢
在这里插入图片描述
我们将会在target文件夹下面获取到一个项目jar
在这里插入图片描述
那么现在让我们启动起来吧
在这里插入图片描述
结果并没有得到我们想要的Hello world,提示我们没有主清单属性,也就是说没有找到程序的驱动入口,你可能会有疑问,我以前写springboot的时候,打包生成的jar,可以直接跑来啊,为什么这里就不行了,不知道你是否记得,springboot项目有一个很奇怪的要求,就是启动类最好要直接放在代码的最外层,因为springboot项目的bean装配默认规则是根据Application类所在的包位置从上至下扫描,也就是说Application类的包外层是没有被扫描到的。
在这里插入图片描述
那么解决如何来解决呢?
目前查阅了网上的资料,得到了两种的解决方案:
1.配置pom文件来确定jar的启动类
在pom的文件里面添加如下的命令:

<?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>com.best</groupId>
    <artifactId>demo2</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <!--需要修改的地方,代表是启动的入口类-->
                                    <mainClass>
                                        HelloWorld
                                    </mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

那么我们再次打包程序,并且运行jar,会得到下面的结果
在这里插入图片描述
可以看到我们想要的Hello world 是出来了,但是我们的中文(哈哈)变成了乱码,那为什么我们在测试环境下得到的是O(∩_∩)O哈哈~,而在打包成jar的时候,却是乱码呢。因为在development 下maven 项目默认是utf-8模式,而我们一旦进行了打包,maven的打包默认格式是GDK编码,一旦知道了问题所在,那么修改就简单了,我们直接在pom文件里面修改maven的配置,设置默认打包编码的格式是utf-8。如下

 <!--设置Java的运行环境是1.8-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <!--项目编码,使得中文在控制台输出不为乱码-->
                    <encoding>utf-8</encoding>
                </configuration>
            </plugin>

那么我们重新打包一下,在测试一下结果如下
在这里插入图片描述
第二种方法
直接使用idea的工具来构建,那么我们重新编写一个新的demo3,在里面写下同样的代码
在这里插入图片描述
我们按下如下的按钮
file 》 project structure
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最好按我上面的步骤来,不然会出现意外。那么现在让我们直接来构建jar吧
在这里插入图片描述
选择build或者rebuild,第一次建议使用build,后续使用rebuild。
在这里插入图片描述
在这里会得到你想要的jar,那么直接运行,你可能直接成功。
在这里插入图片描述
但是也会出现中文乱码的现象,要解决这个现状,查阅了网上的资料,发现大家都在使用
java -Dfile.encoding=utf-8 -jar XXX.jar
但是我自己测试了一下,发现不灵,ε=(´ο`*)))唉
最终我在一个大佬文章的提示下找到了解决方法
https://blog.csdn.net/sjmz30071360/article/details/80137165#commentBox
在这里插入图片描述
那么现在你再去重新rebuild一下,就能解决乱码问题了哈。
完美

猜你喜欢

转载自blog.csdn.net/qq_41967899/article/details/87261723