netty 專案打包釋出至liunx
前言:
之前我們提及瞭如何使用Maven來建立、管理和打包專案,也簡單過了一遍Linux中搭建Java開發環境的步驟,現在我們就開始將我們之前開發的專案demo釋出到Linux環境下,並讓它正常執行起來。
釋出思路:
- 使用Maven將專案打包為.jar
- 將專案的.jar和專案所有依賴的jar包都複製到Linux下
- 建立專案啟動指令碼來啟動專案
準備工作:
- 查詢Linux系統機器的Ip地址:方法很簡單,在Linux中開啟終端輸入
ifconfig
即可查到Ip地址為192.168.35.130
: - 修改Eclipse中客戶端和伺服器的連線Ip地址改為此地址:
private static final String IP = "192.168.35.130";
private static final int PORT = 8088;
- 1
- 2
- 1
- 2
Maven打包專案:
在之前的篇幅中我們已經講解了Maven的相關常識,這裡我們一開始沒有使用Maven來建立專案,而是使用Eclipse建立了一個Java Application,這裡要使用Maven來管理已建立好的Eclipse工程,步驟如下:
-
Eclipse安裝Maven外掛:
在Eclipse中點選Help
->Eclipse Marketplace
,搜尋maven在搜尋結果列表中找到Maven Integration for Eclipse
-
普通Eclipse專案Maven適配:
在Eclipse選中專案根目錄,右鍵Configure
->Convert To Maven Project
:
在彈窗中輸入Group Id
(包名,一般是域名反寫)、Artifact Id
(工程名稱)和Version
:
操作完成之後,在專案下面多出了一個pom.xml
檔案<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
-
專案依賴於其他專案:
可以開啟pom.xml
的Dependencies
頁籤,通過Add
進行新增,新增時輸入可以通過輸入GroupId和ArtifactId進行搜尋:
例如:我們專案中使用了Netty來搭建網路層開發,所以要將其jar包新增到Dependencies中:
需要將本地/lib資料夾中的.jar一一新增到Dependencies:
或者是選中pom.xml
右鍵Maven
->Add Dependency
也可以進入到新增依賴的視窗。也可以在pom.xml
中直接新增<dependencies>...</dependencies>
,新增一下內容:<dependencies> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.0.42.Final</version> </dependency> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>2.5.0</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> <version>1.6</version> </dependency> </dependencies>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
-
專案打包:
通常通過命令列視窗和Maven指令來進行打包,但這是我們可以直接在Eclipse中進行打包簡化打包流程,Jave Application工程會被打包成.jar
包,而Jave Web工程則打包成.war
包,這裡我們要將Java Application打包成一個可執行程式的jar包,需要提前考慮三個步驟:- 配置檔案需要打進jar包;
- 需要制定程式的main入口類;
- 所有依賴的第三方庫也要打進jar包。
滿足以上三個條件的話,我們就能使用
java -jar xxx.jar
來執行我們的程式了,為了滿足這個目的,我們通常需要藉助一些輔助於Maven的打包外掛,常見的有maven-assembly-plugin
和maven-shade-plugin
,但是使用maven-assembly-plugin
的話會把所有需要打到包裡的檔案全部打成一個.jar包,而且假如第三方配置檔案於本地配置檔案存在重名時,會出現直接覆蓋的bug,所以這裡我們還是選用maven-shade-plugin
外掛來打包。- 修改
pom.xml
,首先引入maven-shade-plugin
,需要在<build><plugins><plugin>...</plugin></plugins></build>
中新增:<groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>1.4</version>
- 1
- 2
- 3
- 1
- 2
- 3
在同等級位置新增入口類和並制定打包外掛(其中
<goal>shade</goal>
就指定了打包外掛使用maven-shade-plugin
):<executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <!-- 定義入口類 --> <mainClass>com.tw.login.LoginSocketServer</mainClass> </transformer> </transformers> </configuration> </execution> </executions>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 方法一:在Eclipse中選中專案的
pom.xml
檔案,右鍵Run As
->Maven Clean
,假如清理成功,target資料夾中的編譯生成檔案都被清除掉:[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building TWLogin 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ TWLogin --- [INFO] Deleting E:\java web\workplace\TWLogin\target [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.293 s [INFO] Finished at: 2017-03-24T13:09:58+08:00 [INFO] Final Memory: 7M/153M [INFO] ------------------------------------------------------------------------
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
然後執行打包指令:選中專案的
pom.xml
檔案,右鍵Run As
->Maven Build
:假如報錯:
[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/NoGoalSpecifiedException
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
在
pom.xml
檔案<build>
標籤裡面加上<defaultGoal>compile</defaultGoal>
即可,假如又出現如下錯誤:[ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK? [INFO] 1 error [INFO] ------------------------------------------------------------- [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.594 s [INFO] Finished at: 2017-03-24T14:06:13+08:00 [INFO] Final Memory: 10M/153M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project TWLogin: Compilation failure [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK? [ERROR] -> [Help 1]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
解決方案是:在Eclipse選中專案,
右鍵
->Properties
->Project Facets
,勾選Apache Tomcat,因為Eclipse中Maven打包依賴Tomcat服務:正確的輸出結果如下:
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building TWLogin 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ TWLogin --- [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 1 resource [INFO] [INFO] --- maven-compiler-plugin:3.5.1:compile (default-compile) @ TWLogin --- [INFO] Nothing to compile - all classes are up to date [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.801 s [INFO] Finished at: 2017-03-22T13:07:50+08:00 [INFO] Final Memory: 10M/217M [INFO] ------------------------------------------------------------------------
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
假如出現編碼的警告,要解決這個警告,只需在
pom.xml
的<project>
標籤內新增以下內容指定編碼方式:<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>
- 1
- 2
- 3
- 1
- 2
- 3
- 方法二:可以開啟命令列視窗,定位到當前專案的目錄下,使用
mvn clean package
進行打包,相關依賴資訊和打包方式在pom.xml
中配置:
-
打包成功後,在專案的target目錄下會生成對應Version版本的.jar包,例如這裡我的輸出包為:
TWLogin-0.0.1-SNAPSHOT.jar
,這就是我們要用來放到Linux伺服器中執行的原始碼包:
Linux下安裝Maven:
-
通過終端解壓安裝包到
/usr/local
目錄下:sudo tar -xzf /mnt/Windows/apache-maven-3.3.9-bin.tar.gz -C /usr/local/jvm
- 1
- 1
-
修改使用者變數配置檔案
~/.bashrc
和系統環境配置檔案/etc/profile
,都是在檔案最後插入Maven的配置資訊:#Set maven environment MAVEN_HOME=/usr/local/jvm/apache-maven-3.3.9 export MAVEN_HOME export PATH=${PATH}:${MAVEN_HOME}/bin
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
-
使用
source .bashrc
和source /etc/profile
使修改配置檔案內容立即生效,使用mvn -v
測試安裝是否成功,如果成功,則顯示當前安裝的Maven的版本資訊:linsh@ubuntu:~$ mvn -v Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T08:41:47-08:00) Maven home: /usr/local/jvm/apache-maven-3.3.9 Java version: 1.8.0_121, vendor: Oracle Corporation Java home: /usr/local/jvm/jdk1.8.0_121/jre Default locale: zh_CN, platform encoding: UTF-8 OS name: "linux", version: "4.2.0-27-generic", arch: "amd64", family: "unix" linsh@ubuntu:~$
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
在Linux中執行專案:
-
我們將之前打包得到的
TWLogin-0.0.1-SNAPSHOT.jar
複製到Linux中,新建一個目錄作為專案總目錄application
,然後再為每個專案建立一個子目錄,這裡我們以我們的專案名稱來建立子目錄,將專案檔案複製到此目錄下:sudo mkdir /application sudo mkdir /application/TWLogin sudo cp -r /mnt/Windows/TWLogin /application/TWLogin
- 1
- 2
- 3
- 1
- 2
- 3
-
測試執行專案:
直接進到專案目錄/application/TWLogin
中,使用執行指令java -jar TWLogin-0.0.1-SNAPSHOT.jar
執行程式,然後再在Eclipse中啟動客戶端程式碼,嘗試連線伺服器併發送資料,假如執行正常,情況如下:[email protected]:/application/TWLogin$ java -jar TWLogin-0.0.1-SNAPSHOT.jar 三月 21, 2017 10:07:42 上午 com.tw.login.LoginSocketServer main 資訊: 開始啟動Socket伺服器... 三月 21, 2017 10:07:42 上午 com.tw.login.LoginSocketServer run 資訊: Socket伺服器已啟動完成 三月 21, 2017 10:07:54 上午 com.tw.login.LoginSocketServer channelRead 資訊: 資料內容:UserName=linshuhe,Password=123456
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
注:
假如你也跟我一樣出現這個錯誤:TWLogin-0.0.1-SNAPSHOT.jar中沒有主清單屬性
,那麼恭喜你跟我一樣犯了個低階錯誤,忘了在使用maven打包專案之前,在pom.xml
中新增專案的入口函式main的相關路徑資訊,解決方案就是在pom.xml
的中新增以下內容:<transformers> <
相關推薦
netty 專案打包釋出至liunx
前言: 之前我們提及瞭如何使用Maven來建立、管理和打包專案,也簡單過了一遍Linux中搭建Java開發環境的步驟,現在我們就開始將我們之前開發的專案demo釋出到Linux環境下,並讓它正常執行起來。 釋出思路: 使用Maven將專案打包為.jar將專案的.j
maven專案打包釋出時跳過測試
1、在執行run as時候加上引數: clean install compile -Dmaven.test.skip=true 2、在pom檔案中新增如下: [html] view plain copy <code class="language-html"> 
SpringBoot專案打包釋出到外部tomcat時,出現各種異常的解決fang
先說遇到問題的情景: 初次嘗試使用spring boot框架寫了個小web專案,在Intellij IDEA中能正常啟動執行。使用maven 執行install,生成war包,釋出到本機的tomcat下,出現異常,主要的異常資訊是 …LifeCycleExce
springboot系列三、SpringBoot 單元測試、配置訪問配置、專案打包釋出
一、單元測試 生成的demo裡面包含spring-boot-starter-test :測試模組,包括JUnit、Hamcrest、Mockito,沒有的手動加上。 <dependency> <groupId>org.springframework.boo
Python專案打包釋出方法
目前python打包工具有多個,目前比較好用的為pyinstaller,該工具可以支援在window和linux下使用。 在windows下,大小為幾十K的原始檔打包成exe檔案,可能為幾十
小紀--maven專案打包釋出到linux
0.專案結構 ddoe-server-all是將前面的專案都整合在一起,並提供配置檔案server.xml以及主啟動類啟動專案。 1.maven打包 採用maven-assembly自定義包結構。詳見之前的blog: 依賴的專案需要先打包
python專案打包釋出總結
概覽 這裡主要收集python專案的打包、釋出和部署的常用方法,只是入門級別,深入的流程還是以官方文件為準(連結每節都已經給出)。 簡介 distutils - Python自帶的基本安裝工具, 適用於非常簡單的應用場景使用, 不
Android studio2.3.3專案打包釋出apk成功,安裝失敗
今天我遇到了一個安卓專案在打包釋出後無法安裝,很是鬱悶,折騰了一下午,最後解決了,在這裡寫下總結,希望以後有遇到相同問題困擾的朋友可以帶來幫助。首先,我的工程中的設定裡的run install是關閉的,我沒有試過開啟的狀態下發布出來的應用能不能順利安裝,在網上搜索據說這個開啟
專案打包釋出提示問題解決
you have a valid ios distribution certificate on the developer website,but it is not installed locally,if your signing identity is instal
【python】專案打包釋出
概覽 這裡主要收集python專案的打包、釋出和部署的常用方法,只是入門級別,深入的流程還是以官方文件為準(連結每節都已經給出)。 簡介 distutils - Python自帶的基本安裝工具, 適用於非常簡單的應用場景使用, 不支援依賴包的安裝 通過
VS2010專案打包釋出和程式碼混淆的一起操作
1 把專案的生成路徑改成Release(通過專案的屬性-生成來修改) 2 把整個Release資料夾拷到另外一個地方,然後用防止反編譯軟體來生成新的exe,再覆蓋掉 3 在打包專案裡面把覆蓋完後的Release資料夾裡面內容新增進來,生成快捷方式以及解除安裝在此不詳細說明
Angular專案打包釋出到IIS,開啟網站無法加載出內容的問題
首先angular專案打包可以執行cmd命令列【ng build --prod --aot】 ,成功後會在根目錄下生成dist資料夾,我們只需將該資料夾拷貝到伺服器,然後IIS上新增站點指向對應的資料夾即可;一般情況下都是能正常訪問網站的,以至於網站內容無法顯示出來則是瀏覽器
SpringBoot專案打包釋出Linux環境
環境 Linux機器環境:CentOS 7.4 64位 + JDK8 + MySql5.6.41 + Nginx-1.1.10 框架:Spring Boot v2.0.4.RELEASE, Spring v5.0.8.RELEASE 安裝JDK yu
QT5的程式打包釋出(將QT5的工程專案打包成一個exe程式) QT5的程式打包釋出(將QT5的工程專案打包成一個exe程式)
QT5的程式打包釋出(將QT5的工程專案打包成一個exe程式) 最近,在學習QT5的過程中,想嘗試著把自己寫的工程程式給打包釋出出來,在任何一臺windows系統都能執行,這樣就不會限於電腦需不需要安裝QT安裝包了。 首先,先介紹自己使用的環境。我使用的QT版本是。我的電
vue專案構建-打包-釋出--簡易demo
一、vue專案構建 首先電腦要安裝node.js及npm vue.js的官方文件給出的構建流程: #全域性安裝 vue-cli $ npm install --global vue-cli #建立一個基於 webpack 模板的新專案 $ vue init webpack my-project
4-QT的程式打包釋出(將QT5的工程專案打包成一個exe程式)
https://blog.csdn.net/windsnow1/article/details/78004265 最近,在學習QT5的過程中,想嘗試著把自己寫的工程程式給打包釋出出來,在任何一臺windows系統都能執行,這樣就不會限於電腦需不需要安裝QT安裝包了。 首先,先介紹自己使用的環境。
Android Studio專案打包(一)釋出apk
Build ,Generate Signed APK 如果是第一次,點選Create new… 參考如下圖: 注:記住你的密碼 和 Key Alias 指
spring boot專案搭建 釋出 打包彎路全紀錄
這幾天在學習spring boot,因為當前手頭沒有需求,就嘗試將之前一個小工程轉換為spring boot專案。同時由於目前手頭的IDE實在太老(Eclipse indigo),很多步驟都是手動完成的,走了不少彎路。記錄如下,也方便以後查閱: 一、Eclipse Ind
用gulp打包釋出專案
在釋出之前還可以做程式碼優化: 1.壓縮 2.合併 3.增加版本號 首先,手動打包釋出的網站比如:https://javascript-minifier.com 顯然,手動打包麻煩費時費力的,那自從node.js出來以後,方便快捷,自動化處理。 打包
將專案打包至私有maven倉庫
1.下載並安裝maven 2.開啟conf目錄的settings.xml檔案,找到servers節點並新增私有倉庫的id、使用者名稱、密碼 <!-- 配 上傳的賬號和密碼 --> <!-- 釋出到發行版本的倉庫中,即正式版本倉庫 --> &l