學習使用java寫項目的時候,java的jar包對我來說是很神奇又很復雜不想去了解的東西,如今形勢所迫開始寫java項目,做了些了解,也有幾個問題。
1、其中一個打包方式
在pom文件中輸入如下插件(在<project>的里面),然后點擊右邊欄偏上那個“m”字,進入maven,選中項目下Lifecycle/package,然后運行maven中上方的運行小三角。

<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>1.4</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.lwx.sha256.main</mainClass> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.handlers</resource> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.schemas</resource> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>
注意:上面的<transformer>的<mainClass>指定了程序main函數入口所在的類
2、關於package
其實java文件的package我一開始是不用的,因為其他語言不需要,而且不用也沒見運行不了,所以我的代碼都是如下所示。
但是在打包的那一步驟可以看出來我是在pom文件中直接指定了項目入口,然后我就被動了解了一下package,如果我的目錄依舊如上圖所示,而且入口是在main文件中的main.class,那么我在pom中寫的應該是<mainClass>main</mainClass>,就沒有什么com.xxx.xxx了,但是我突然覺得太不規范了,把目錄改成如下圖所示:
3、關於java的jre和jdk
如果你上傳jar到遠端服務器,並且報了如下錯誤:
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/springframework/boot/loader/JarLauncher : Unsupported major.minor version 52.0
正經來說就是由較高版本的JDK編譯的java class文件試圖在較低版本的JVM上運行產生的錯誤。最終是查到了解決方法,在pom中加入如下的配置,指定編譯版本,這里指定1.7:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>7</source> <target>7</target> </configuration> </plugin>
之前有嘗試更改jre版本,但其實這是java compiler的問題。
另外關於jre和jdk我還是雲里霧里,即使網上一套一套講了許多,但是我明知道java項目中package的規范,但是學習的時候死記,真正在用的時候還是會偷懶不建包。大概多用幾次就能更加清楚兩者的區別吧
查看版本
#查看jre版本 $ java -version #查看jdk版本 $ javac -version