1. 程式人生 > >netty 專案打包釋出至liunx

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

    外掛,假如未安裝則點選Install進行安裝,已安裝但非最新版本可以點選Update,已經安裝且為最新版本顯示Installed: 
    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"
    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.tw.login</groupId> <artifactId>TWLogin</artifactId> <version>0.0.1-SNAPSHOT</version> <build> <sourceDirectory>src</sourceDirectory> <resources> <resource> <directory>src</directory> <excludes> <exclude>**/*.java</exclude> </excludes> </resource> </resources> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
    • 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.xmlDependencies頁籤,通過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-pluginmaven-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 .bashrcsource /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