MyCat 1.6部署編譯構建環境
簡單來說,編譯(compile)是用javac編譯器將.java源代碼編譯成.class中間碼的動作;而構建(build)則是不止將源代碼編譯,還包括編譯后執行開發者指定的測試、將所有.class打包成.jar包的動作,以及編譯前和編譯時所遇到的工具、包依賴的分析和下載問題。
下面以Windows 7+下面的軟件,將MyCat 1.6(Mycat-server)從源代碼構建成一個如同官方release的可運行的jar。整個過程最關鍵的幾步需要聯網,而且Eclipse(內置的Maven)會下載約650MB的依賴包和插件,總耗時在3小時~10小時不等(絕大部分時間都花在下載上)。
Eclipse Neon.3 4.6.3
Mycat-server 1.6 brach
安裝配置Eclipse
從Eclipse官網下載并解壓eclipse-java-neon-3-win32-x86_64.zip到本地目錄中,整個安裝就是這么簡單。
配置Maven(Ecplise內置)
Maven是個強大的項目構建工具,在這里我們只關注它分析、自動下載依賴包的功能。Eclipse內嵌了Maven,但這里直接使用默認配置會有兩個不方便:
默認只從Apache的中央庫下載,會找不到trilead-ssh2的build221等插件或依賴包,我們需要添加其他庫(下載源)來下載。
從遠程庫下載來的項目依賴包和Maven插件默認保存到Windows的用戶目錄(%USERPROFILE%)的.ms2/repository里,在C盤不充裕也沒有做目錄移動時,我們更希望把這些下載內容保存到其他空閑盤區。
為此,我們在Eclipse的解壓目錄里創建settings.xml,添加以下內容,修改<localRepository>標簽里的路徑為自己機器上的路徑,以UTF-8編碼保存。
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- 將依賴包/Maven插件下載到下面的目錄里 -->
<localRepository>D:\maven_repo</localRepository>
<profiles>
<!-- 定義名叫mycat的配置 -->
<profile>
<id>mycat</id>
<!-- 依賴包庫(下載源) -->
<repositories>
<repository>
<id>nexus</id>
<name>local private nexus</name>
<url>http://nexus.mycat.io/content/groups/public</url>
</repository>
<repository>
<id>java.net</id>
<url>https://maven.java.net/content/repositories/public</url>
</repository>
<repository>
<id>JBoss repository</id>
<url>http://repository.jboss.org/nexus/content/groups/public</url>
</repository>
<repository>
<id>Jenkins ci</id>
<url>http://repo.jenkins-ci.org/releases</url>
</repository>
</repositories>
<!-- Maven插件庫(下載源) -->
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<url>http://nexus.mycat.io/content/groups/public</url>
</pluginRepository>
<pluginRepository>
<id>java.net</id>
<url>https://maven.java.net/content/repositories/public</url>
</pluginRepository>
<pluginRepository>
<id>JBoss pluginRepository</id>
<url>http://pluginRepository.jboss.org/nexus/content/groups/public</url>
</pluginRepository>
<pluginRepository>
<id>Jenkins ci</id>
<url>http://repo.jenkins-ci.org/releases</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<!-- 啟用上面定義的mycat配置 -->
<activeProfile>mycat</activeProfile>
</activeProfiles>
</settings>
配置Eclipse
先啟動Eclipse,進入到主界面后,通過Window->Prferences,打開配置窗口。
找到Java->Installed JREs,看看本機的Java 8安裝目錄是否被識別了,沒有的話,點擊Add按鈕來添加(添加后記得選中它,并且點擊右下角的Apply按鈕)。** 雖然這里叫做JRE,但由于我們需要編譯MyCat,所以必須指向的是JDK。 **
找到Maven->User Settings,點擊User Setting的Browse ...按鈕,選擇我們上面創建的settings.xml文件,然后依次點擊Update Settings按鈕和Reindex按鈕來讓settings.xml生效。如果Local Repository是否已經變成了settings.xml中<localRepository>中的值,那么說明配置成功,點擊Apply按鈕之后,OK關閉配置窗口。
下載Mycat-server源代碼
到Github.com下載MyCATApache/Mycat-Server的1.6源代碼到本地并解壓。
在Eclipse中導入Mycat-server
回到Eclipse中,File->Import...打開導入項目對話框,選擇Maven->Existing Maven Projects,點擊Next按鈕。
點擊Root Directory的Browse...按鈕,選擇解壓后的MyCat 1.6根目錄,選擇Finish,開始導入。** 導入過程中,如果MayCat的依賴包和Maven插件不在本地庫里,Maven會從外部庫下載,因此第一次導入會非常耗時并需要全程聯網。 ** 在電信10M光纖,無任何加速或者科學手段下,第一次導入基本都要用2個多小時。不過下載好了之后,以后導入需要相同包的應用或者再次導入MyCat自己時,就不再需要下載了。所以在下載過程中卡住了的話,殺掉Eclipse進程,重新打開Ecplise,刪除導入了只有一半的Mycat-server項目,再重新導入就能繼續下去了。
修改Mycat-server的pom.xml:增加源代碼的編碼聲明(可選)
Mycat-server的pom.xml沒有定義源代碼的編碼方式。在編譯過程中,Maven會報“Using platform encoding (某某編碼 actually) to copy filtered resources, i.e. build is platform dependent!”這樣的WARNING。雖然目前并不影響編譯,但很難說以后Mycat-server會不會有內嵌的非ASCII字符集的多國語言存在,所以最好還是修改解壓后的MyCat根目錄里的pom.xml,在<app.encoding>標簽下增加以下一行,來讓Maven按UTF-8來理解源代碼。
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
修改Mycat-server的pom.xml:增加Maven插件的版本聲明(可選)
Mycat-server的pom.xml沒有聲明maven-jar-plugin和maven-eclipse-plugin的所需版本。在編譯過程中,Maven會因此而報WARNING。這個WARNING沒有實質性的影響,但按下面修改解壓后的MyCat根目錄里的pom.xml避免這個警告。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version><!-- 增加此條目,聲明使用的jar插件版本 -->
<configuration>
<excludes>
<exclude>**/.svn/**</exclude>
</excludes>
</configuration>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
<!-- configuration> <finalName>${project.build.finalName}-${buildNumber}</finalName>
</configuration -->
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.10</version><!-- 增加此條目,聲明使用的eclipse插件版本 -->
<configuration>
<sourceExcludes>
<sourceExclude>**/.svn/**</sourceExclude>
</sourceExcludes>
<downloadSources>true</downloadSources>
<outputDirectory>classes</outputDirectory>
<additionalConfig>
<file>
<name>.settings/org.eclipse.core.resources.prefs</name>
<content>
<![CDATA[eclipse.preferences.version=1${line.separator}encoding/<project>=${app.encoding}${line.separator}]]>
</content>
</file>
</additionalConfig>
</configuration>
</plugin>
新增構建配置(build configuration)
在Ecplise的主界面上,選中Mycat-server項目,再在工具欄Run->Run Configurations...,打開構建配置管理界面。
雙擊界面中的Maven Build,等它自動創建一個叫New_configuration的新配置。然后按下面修改這個新配置,再點Apply把修改部分保存:
修改Name欄,給這個“New_configuration”配置起個新名字
點擊Base diretory下的Workspace...按鈕,選擇Mycat-server項目然后按OK,以Mycat-server的根目錄為基準目錄
在Goals欄,輸入clean install,指明Maven對這個項目構建時,執行pom中定義的clean和install所屬操作(Maven的goal概念,類似Makefile體系的make install中的install)
在界面中間的一大堆復選框中,我們只選中Debug Output和Skip Tests——Debug Ouput能夠豐富Maven構建項目時的輸出信息,萬一碰到錯誤也有跡可查;Skip Tests讓Maven跳過Mycat-server定制的測試項目,測試的輸出很多而且很復雜,我們目前僅需要編譯出MyCat的jar包,所以我們應該跳過測試。
繼續在同一界面里,點擊Common選項卡,進行以下修改,最后點擊Apply保存:
點擊Encoding框的Other單選下拉框,選中UTF-8來讓Eclipse的Console窗口以UTF-8去理解Maven的輸出,這樣才能使Eclipse正確顯示Mycat-server項目里的中文提示
選中Standard Input and Output框中的Output File單選框,然后點擊Workspace...按鈕,選中Mycat-server項目后OK,再在文本框新出現的“"${workspace_loc:/Mycat-server}”后面鍵盤輸入“/eclipse_console.log”。于是在構建過程中的所有信息(INFO、WARNNING等)不僅在Console窗口顯示,也會寫入到Mycat-server項目根目錄上的eclipse_console.log的構建日志(自動創建文件)里。Console窗口的顯示范圍是有限的,構建信息很多的時候,通過查構建日志就能找回最近一次構建的所有信息,方便解決問題;此外,默認每次構建都會自動清空上一次的構建日志,也不用害怕無限占用磁盤空間。
編譯源代碼并構建jar包
最后我們點擊界面上的Run按鈕,Ecplise就會調用Maven,先清除可能的殘留文件,再構建MyCat 1.6的jar包。
構建Mycat-server還需要用到別的一些Maven插件和依賴包。第一次編譯,Maven還會進一步分析和下載這些依賴,所以這又是一個漫長的過程——比上一次下載用時要略短,但也得做好花費數十分鐘的準備。**但實際的編譯和構建用時其實很短,日后的構建和編譯不需要下載,那其實很快的。
構建完畢后,Ecplise的Console窗口會有如下顯示來提示構建工作完成。這時候到Mycat-server的解壓目錄里,會發現多了一個target目錄,打開里面,就能看到剛剛構建好的MyCat 1.6的jar包了。
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 56.375 s
[INFO] Finished at: 2017-06-01T10:35:34+08:00
[INFO] Final Memory: 38M/734M
[INFO] ------------------------------------------------------------------------