Maven快速入門


Maven快速入門

(譯自http://docs.geotools.org/latest/userguide/tutorial/quickstart/maven.html)

歡迎

本教程適用於喜歡文本編輯器和可靠命令提示符的愉快公司的用戶。即使您經常使用IDE,您會發現從命令行編譯,測試和安裝應用程序通常更快更容易。我們將使用Maven(http://maven.apache.org/)來管理GeoTools項目依賴的大量jar。不要擔心,如果你不熟悉Maven,因為我們會一步一步地解釋一切。

示例應用程序與NetBeans和Eclipse Quickstart教程中使用的應用程序相同:用於加載和顯示shapefile的簡單程序。

當我們准備課程材料時,我們要感謝GeoTools用戶郵件列表中的成員的反饋,特別感謝Eva Shon進行測試/審查早期草案。如果您對本教程有任何問題或意見,請將其發布到用戶列表中。

Java安裝

我們將要使用Java,所以如果您現在沒有安裝Java開發工具包(JDK),那么現在就可以這么做了。

  1. 下載最新的Java 8 JDK:

  2. 在撰寫本文時,最新的Java 8版本是:

    • JDK-8u66-Windows的i586.exe

    GeoTools尚未通過Java 9測試,我們受到構建基礎設施和志願者的限制。

  3. 點擊安裝程序,您將需要設置接受許可協議等等。默認情況下,這將安裝到:

    C:\ Program Files (x86)\ Javajdk1.8.0_66

注意

在本教程中,我們引用Windows使用的文件和目錄路徑。如果您足夠幸運地使用其他操作系統(如Linux或OSX),以下所有命令和源代碼都可以正常工作,只需修改適合的路徑即可。

Maven(為什么不那么糟糕)

Maven是一個廣泛使用的構建工具,通過描述項目的內容來起作用。這是一個不同於Make或Ant工具使用的方法,它列出了構建所需的步驟。

需要一段時間才能習慣於Maven,而對於某些人來說,它仍然是一種愛恨的關系,但這絕對會使GeoTools的工作變得更加容易:

  • 您只需下載與應用程序相同的GeoTools。
  • Jars被下載到您的主目錄中的單個位置(例如Windows上的C:\ Documents and Settings <user> \.m2 \)。這是您的本地存儲庫
  • 將為您下載GeoTools所需的所有第三方jar的正確版本。這可以幫助您避免由錯誤匹配的依賴關系引起的模糊錯誤,這可能非常難以追蹤。
  • 單個本地存儲庫可以更輕松地處理其他多個開源項目。

安裝Maven

  1. http://maven.apache.org/download.html下載Maven

    在本教程中,我們參考Maven 3.2.3版,我們在Maven版本3中遇到了一些麻煩。

  2. 解壓文件apache-maven-3.2.3-bin.zip

  3. 您需要為maven設置幾個環境變量才能工作。導航到 控制面板‣系統‣高級。切換到高級選項卡,然后單擊環境變量按鈕。

    添加以下系統變量:

    • JAVA_HOME = C:\ Program Files (x86)\ Java \ jdk1.8.0_66
    • M2_HOME = C:\ java \ apache-maven-3.2.3

    並將以下內容添加到您的路徑中:

    • PATH = %JAVA_HOME%\ bin;%M2_HOME%\ bin
    ../../_images/env-variables.png
  4. 打開命令提示符附件‣命令提示符

  5. 鍵入以下命令以確認您設置正確:

    C:java> mvn --version
  6. 這應該產生類似於以下輸出的內容:

    C:\ java> mvn -version
    Apache Maven 3.2.3(33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-11T13:58:10-07:00)
    Maven主頁:C:\ java \ apache-maven-3.2.3
    Java版本:1.8.0_66,供應商:Oracle Corporation
    Java home:C:\ Program Files(x86)\ Java \ jdk1.8.0_66 \ jre
    默認語言環境:en_US,平台編碼:Cp1252
    操作系統名稱:“windows 7”,版本:“6.1”,arch:“x86”,系列:“windows”
    ../../_images/maven-version.png

創建一個新項目

  1. 我們現在可以從maven-archetype-quickstart生成我們的項目:

    C:> cd C:\ java
    C:java> mvn archetype:generate -DgroupId = org.geotools -DartifactId = tutorial -Dversion = 1.0-SNAPSHOT -DarchetypeGroupId = org.apache.maven.archetypes -DarchetypeArtifactId = maven-archetype-quickstart
  2. 上述命令創建以下文件和目錄:

    tutorial
    tutorial\pom.xml
    tutorial\src
    tutorial\src\main
    tutorial\src\main\java
    tutorial\src\main\java\org
    tutorial\src\main\java\org\geotools
    tutorial\src\main\java\org\geotools\App.java
    tutorial\src\test
    tutorial\src\test\java
    tutorial\src\test\java\org
    tutorial\src\test\java\org\geotools
    tutorial\src\test\java\org\geotools\AppTest.java

    App.java和AppTest.java只是本教程中未使用的占位符文件。

  3. 在構建過程中,您的本地maven存儲庫將用於存儲這兩個下載的jar,以及您在本地構建的jar。

    您的本地Maven存儲庫位於您的主文件夾中。

    平台 當地報告
    Windows XP: C:\Documents and Settings\You\.m2\repository
    Windows: C:\Users\You.m2\repository
    Linux和Mac: ~/.m2/repository
  4. 在您喜歡的文本編輯器中打開pom.xml文件。如果你的編輯器有一個XML語法模式切換到現在,因為它會使它更容易找到錯誤,如錯誤匹配的括號。一些編輯器(如vim)會在加載文件時自動執行此操作。

  5. 我們將首先定義我們希望使用的GeoTools的版本號。此工作簿是為17-SNAPSHOT編寫的,但您可能希望嘗試其他版本。

    對於生產,推薦使用穩定的釋放:

        <properties> 
            <project.build.sourceEncoding> UTF-8 </project.build.sourceEncoding> <geotools.version> 15.1 </geotools.version> </ properties> 

    為了利用每晚的構建,將geotools.version屬性設置為17-SNAPSHOT。

        <properties> 
            <project.build.sourceEncoding> UTF-8 </project.build.sourceEncoding> <! - 使用最新的快照 - > <geotools.version> 17-SNAPSHOT </geotools.version> </ properties> 
  6. 我們指定以下依賴項(應用程序需要的GeoTools模塊):

    <dependencies>
            <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.geotools</groupId> <artifactId>gt-shapefile</artifactId> <version>${geotools.version}</version> </dependency> <dependency> <groupId>org.geotools</groupId> <artifactId>gt-swing</artifactId> <version>${geotools.version}</version> </dependency> </dependencies>
  7. 我們告訴maven哪些存儲庫下載jars:

        <repository> 
          <repository> <id> maven2-repository.dev.java.net </ id> <name> Java.net repository</ name> <url> http://download.java.net/maven/2 < / url> </ repository> <repository> <id> osgeo </ id> <name>Open Source Geospatial Foundation Repository</ name> <url> http://download.osgeo.org/webdav/geotools/ </ url > </ repository> </ repositories> 

    如果您正在使用夜間構建(如17-SNAPSHOT)並添加對快照存儲庫的引用。

        <repository> 
            <repository> <id> maven2-repository.dev.java.net </ id> <name> Java.net repository</ name> <url> http://download.java.net/maven/2 < / url> </ repository> <repository> <id> osgeo </ id> <name>Open Source Geospatial Foundation Repository</ name> <url> http://download.osgeo.org/webdav/geotools/ </ url > </ repository> <repository> <snapshots> <enabled> true </ enabled> </ snapshots> <id>boundless</ id> <name>Boundless Maven Repository</ name> <url> http://repo.boundlessgeo.com/main </ url> </ repository> </ repositories> 
  8. 如果您想使用Java 8語言級別的功能(例如lambdas),則需要告訴Maven使用1.8源級別

        <build> 
            <plugins> <plugin> <inherited> true </ inherited> <groupId> org.apache.maven.plugins </ groupId> <artifactId> maven-compiler-plugin </ artifactId> <configuration> <source> 1.8 </ source> <target> 1.8 </ target> </ configuration> </ plugin> </ plugins> </ build> 
  9. 返回命令行,並使用以下命令獲取maven下載您項目所需的jar:

    C:\ java \ example> mvn install
  10. 如果maven在下載任何jar時遇到問題,可以隨時重試。國家鏡像通常比默認的maven中心更快。

創建快速入門應用程序

現在我們准備好創建應用程序了。

  1. 克里特org.geotools.tutorial.quickstart包導航到該目錄 tutorial並創建目錄src\main\java\org\geotools\tutorial\quickstart

  2. 在新的子目錄中,使用文本編輯器創建一個新文件Quickstart.java

  3. 填寫以下代碼:

    package org.geotools.tutorial.quickstart; import java.io.File; import org.geotools.data.FileDataStore; import org.geotools.data.FileDataStoreFinder; import org.geotools.data.simple.SimpleFeatureSource; import org.geotools.map.FeatureLayer; import org.geotools.map.Layer; import org.geotools.map.MapContent; import org.geotools.styling.SLD; import org.geotools.styling.Style; import org.geotools.swing.JMapFrame; import org.geotools.swing.data.JFileDataStoreChooser; /**  * Prompts the user for a shapefile and displays the contents on the screen in a map frame.  * <p>  * This is the GeoTools Quickstart application used in documentationa and tutorials. *  */ public class Quickstart { /**  * GeoTools Quickstart demo application. Prompts the user for a shapefile and displays its  * contents on the screen in a map frame  */ public static void main(String[] args) throws Exception { // display a data store file chooser dialog for shapefiles File file = JFileDataStoreChooser.showOpenFile("shp", null); if (file == null) { return; } FileDataStore store = FileDataStoreFinder.getDataStore(file); SimpleFeatureSource featureSource = store.getFeatureSource(); // Create a map content and add our shapefile to it MapContent map = new MapContent(); map.setTitle("Quickstart"); Style style = SLD.createSimpleStyle(featureSource.getSchema()); Layer layer = new FeatureLayer(featureSource, style); map.addLayer(layer); // Now display the map JMapFrame.showMap(map); } }
  4. 返回頂部的項目目錄(包含您的pom.xml文件的目錄),並使用以下命令構建應用程序:

    mvn clean install

運行應用程序

  1. 如果您需要一些形狀文件,您將在 http://www.naturalearthdata.com/項目中找到一份由北美制圖信息學會支持的數據。前往下面的鏈接,下載一些文化媒介。您可以使用“下載所有50m文化主題”。

    將上述數據解壓縮到您可以輕松找到的位置,如桌面。

  2. 您可以在命令行中使用Maven運行應用程序:

    mvn exec:java -Dexec.mainClass = org.geotools.tutorial.quickstart.Quickstart
  3. 應用程序將連接到您的shapefile,生成地圖上下文,並顯示shapefile。

    ../../_images/QuickstartMap.png
  4. 有幾件事情要注意的代碼示例:

  • shapefile未加載到內存中。而是每次需要從磁盤讀取磁盤。這種方法允許您處理大於可用內存的數據集。
  • 我們正在使用一個非常基本的顯示風格,只顯示功能輪廓。在下面的例子中,我們將看到如何指定更復雜的樣式。

事情要嘗試

  • 嘗試不同的樣本數據集。

  • 您可以放大,縮小並顯示完整的范圍,並使用信息工具來檢查示例countries.shp文件中的各個國家/地區。

  • 下載最大的shapefile,您可以找到並查看可以呈現的速度。你會發現這是第一次需要一段時間作為空間索引。之后,渲染將變得更快。

  • 快:我們知道人們選擇空間庫的方式之一是基於速度。通過設計,GeoTools不會將上述shapefile加載到內存中(而是在每次使用空間索引繪制時僅將其顯示所需的內容)從磁盤中流出。

    如果您想要讓GeoTools在內存中緩存shapefile,請嘗試以下代碼:

    /**
     * This method demonstrates using a memory-based cache to speed up the display (e.g. when  * zooming in and out).  *  * There is just one line extra compared to the main method, where we create an instance of  * CachingFeatureStore.  */ public static void main(String[] args) throws Exception { // display a data store file chooser dialog for shapefiles File file = JFileDataStoreChooser.showOpenFile("shp", null); if (file == null) { return; } FileDataStore store = FileDataStoreFinder.getDataStore(file); SimpleFeatureSource featureSource = store.getFeatureSource(); // CachingFeatureSource is deprecated as experimental (not yet production ready) CachingFeatureSource cache = new CachingFeatureSource(featureSource); // Create a map content and add our shapefile to it MapContent map = new MapContent(); map.setTitle("Using cached features"); Style style = SLD.createSimpleStyle(featureSource.getSchema()); Layer layer = new FeatureLayer(cache, style); map.addLayer(layer); // Now display the map JMapFrame.showMap(map); }

    您還需要添加此import語句:

    import  org.geotools.data.CachingFeatureSource ; 

    暗示

    在文本編輯器而不是IDE中使用GeoTools javadocs來確定源中需要哪些import語句。javadoc還列出了找到每個類的GeoTools模塊。

    注意

    構建時,您可能會看到不推薦使用CachingFeatureSource的消息。可以忽略它,這只是一個警告。該課程仍在考試中,但可用。

  • 嘗試並整理出所有不同的“側車”文件 - 以及它們是什么。樣本數據集包括“shp”,“dbf”和“shx”。有多少其他側車文件?
  • 高級:使用FileDataStoreFinder可以方便我們使用文件。另一種做事情的方法是連接參數的映射。這種技術使我們能夠更好地控制我們如何使用shapefile,並且還允許我們連接到數據庫和Web功能服務器。
     File file = JFileDataStoreChooser.showOpenFile("shp", null); Map<String,Object> params = new HashMap<>(); params.put( "url", file.toURI().toURL() ); params.put( "create spatial index", false ); params.put( "memory mapped buffer", false ); params.put( "charset", "ISO-8859-1" ); DataStore store = DataStoreFinder.getDataStore( params ); SimpleFeatureSource featureSource = store.getFeatureSource( store.getTypeNames()[0] );
  • 那么,快速啟動應用程序中實際使用的jar是什么?在命令行上嘗試以下操作:

    mvn依賴:樹

    我們將在剩下的教程中更深入地利用一些項目。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM