背景: 一個(gè)java應(yīng)用,需要再centos上運(yùn)行成洗,思路是通過(guò)腳本來(lái)啟動(dòng)五督,
首先需要將java應(yīng)用打成jar包,方式是通過(guò)maven來(lái)操作瓶殃,然后編譯報(bào)錯(cuò)
排查配置:
-
File ->Setting -> Build,Execution,Deployment ->Compiler->Java Compiler
Project bytecode version ,Per-Module bytecode version
最好跟本機(jī)安裝的保持一致充包,這邊 都寫(xiě)成8
image-20210113135400798.png -
File ->Project Structure ->Project Setting -> Project
Project SDK, Project language level
需要跟本機(jī)安裝的保持一致,這邊 都寫(xiě)成8
image-20210113140242628.png -
編譯時(shí)候碌燕,發(fā)現(xiàn) 問(wèn)題1 處的 bytecode version經(jīng)常會(huì)改變误证,這時(shí)候需要排查下pom.xml文件,如下圖中的source,target需要寫(xiě)成對(duì)應(yīng)的修壕,這邊之前一直沒(méi)注意愈捅,寫(xiě)的都是1.5/1.6,編譯時(shí)候總是提示 ‘java: -source 1.6 中不支持’
image-20210113142138416.png 運(yùn)行jar包的時(shí)候慈鸠,
1 .提示ClassNotFoundException蓝谨, 這個(gè)class 是第三方的jar包中的類(lèi),排查了下了對(duì)應(yīng)路徑下沒(méi)有jar包青团,直接復(fù)制到j(luò)ar包目錄下譬巫,我這是lib,新的腳本命令是java -cp lib/ -jar 目標(biāo).jar
-
提示xxx 中沒(méi)有主清單屬性 督笆,需要在pom.xml文件中 配置 <mainClass>標(biāo)簽指定對(duì)應(yīng)的啟動(dòng)類(lèi)即可
image-20210113145414036.png
- 這邊有kotlin寫(xiě)的類(lèi)芦昔,直接用idea自帶的maven package腳本不行,需要加上 kotlin:compile
clean+package的命令是mvn clean kotlin:compile package -Dmaven.test.skip=true
,
有kotlin文件,編譯的速度會(huì)慢了一點(diǎn)周叮,klass ->class 智末?
- 生成的jar包 包含依賴(lài)的第三方j(luò)ar包
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<classifier></classifier>
<archive>
<manifest>
<mainClass>包名+啟動(dòng)類(lèi)名</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- 指定在打包節(jié)點(diǎn)執(zhí)行jar包合并操作 -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
我這邊遇到一個(gè)問(wèn)題斧吐,因?yàn)槭褂玫牡谌絡(luò)ar包是本地生成的,在生成的可執(zhí)行jar包中調(diào)用總是提示classNotFoundExcetion...
排查了下,生成的jar包中,沒(méi)有本地第三方的jar包類(lèi)文件嫂伞,其他引用到的第三方倉(cāng)庫(kù)類(lèi)都有,于是把引用的本地第三方j(luò)ar包放在本地倉(cāng)庫(kù),pom文件中dependency下帖努,問(wèn)題解決撰豺。
引用的本地第三方j(luò)ar包放在本地倉(cāng)庫(kù)的命令格式:
mvn install:install-file -Dfile=本地第三方包名.jar -DgroupId=com.aa.bb -DartifactId=hello -Dversion=1.0 -Dpackaging=jar
我是通過(guò)把本地jar包放到本地倉(cāng)庫(kù)下解決了這個(gè)問(wèn)題。