IDEA與MAVEN使用

maven是一款優(yōu)秀的服務(wù)構(gòu)建工具兜喻,基于約定優(yōu)于配置原則涩哟,提供標(biāo)準(zhǔn)的服務(wù)構(gòu)建流程番甩。maven的優(yōu)點(diǎn)不僅限于服務(wù)構(gòu)建侵贵,使用maven能夠做到高效的依賴管理,并且提供有中央倉庫可以完成絕大多數(shù)依賴的下載使用缘薛。

maven自身提供有豐富的插件窍育,可以在不使用額外插件的條件下完成服務(wù)的編譯、測試宴胧、打包漱抓、部署等服務(wù)構(gòu)建流程,即maven對服務(wù)的構(gòu)建過程是通過多個插件完成的恕齐,且maven已經(jīng)自定義了插件的行為乞娄。可以理解為每一個插件都是對接口的實(shí)現(xiàn)显歧,可以自定義插件补胚,以完成自定義功能,例如完成對不同編程語言的服務(wù)構(gòu)建過程追迟。不過相對于gradle的自定義插件行為溶其,maven的實(shí)現(xiàn)過程略微復(fù)雜。

IDEA配置maven工具

File > Other Settings > Default Settings進(jìn)入Default Settings設(shè)置框

Build, Execution, Deployment > Build Tools > Maven進(jìn)入maven工具配置

上圖中展示了三項(xiàng)配置敦间,Maven home directory指向maven工具根目錄瓶逃,User settings file指向conf下的settings.xml文件,表示使用全局的settings.xml文件廓块,Local repository指向本地倉庫地址厢绝。

settings.xml文件用于記錄本地倉庫、遠(yuǎn)程倉庫以及認(rèn)證信息等maven工程使用的元素带猴,該文件有兩種級別昔汉,用戶級別和全局級別,存放位置一般為${maven.home}/conf/settings.xml${user.home}/.m2/settings.xml拴清。Local repository本地倉庫用于存放自動下載后的依賴文件和安裝到本地的服務(wù)靶病。

settings.xml文件

settings.xml文件起到的作用為全局作用会通,該文件中定義的行為一般作用于多個工程,或者所有工程娄周。其中有幾個較為重要的元素:

  • localRepository
    本地倉庫的地址涕侈,在maven工程中依賴的構(gòu)件,首先到本地倉庫進(jìn)行查找煤辨,查找不到才會到遠(yuǎn)程倉庫查找裳涛。

  • servers
    在工程中進(jìn)行構(gòu)件部署或者依賴下載時,添加的repositories,distributionManagement元素中定義了服務(wù)器的地址众辨,登錄服務(wù)器需要的認(rèn)證信息端三,例如秘鑰或者用戶名密碼需要與工程分離,所以定義在該標(biāo)簽中與工程進(jìn)行關(guān)聯(lián)鹃彻。

  • mirrors
    當(dāng)遠(yuǎn)程倉庫的連接速度較慢時郊闯,或者使用私服進(jìn)行依賴控制時,可以配置鏡像服務(wù)器來替代某個或所有遠(yuǎn)程服務(wù)器浮声。

  • profiles
    提供多套配置虚婿,根據(jù)環(huán)境不同、指定的條件判斷結(jié)果泳挥,選擇使用某種配置然痊。例如在某個profile中配置遠(yuǎn)程倉庫和插件倉庫,根據(jù)使用的操作系統(tǒng)是windows或者unix屉符,選擇性激活不同的配置剧浸。

  • activeProfiles
    手動激活使用某一個profile配置。

建立maven工程

File > New > Project建立maven工程

此處填寫的為項(xiàng)目的坐標(biāo)矗钟,GroupId表示公司或組織唆香,ArtifactId表示產(chǎn)品,Version表示產(chǎn)品版本號吨艇。

使用這三個字段形成一個坐標(biāo)躬它,完成對此工程的表述。在maven的世界中东涡,對所有依賴的引用都是通過坐標(biāo)完成的冯吓,即使用GAV(GroupId,ArtifactId,Version)進(jìn)行定位。

pom.xml文件

上圖所示為工程根目錄下的pom.xml文件內(nèi)容疮跑,modelVersion表示當(dāng)前POM模型的版本组贺,對于當(dāng)前的maven 3而言,元素值為4.0.0祖娘,groupId,artifactId,version則是前面提到過的工程坐標(biāo)失尖。

POM(Project Object Model)作為項(xiàng)目對象模型,用于描述工程信息、依賴信息掀潮,并且定義構(gòu)建過程中的操作菇夸。該文件為maven構(gòu)建服務(wù)流程中最重要的文件,雖然默認(rèn)情況下文件內(nèi)容很少胧辽,只描述了工程的坐標(biāo)信息峻仇,那是因?yàn)橐磺袠?gòu)建操作都是按照約定進(jìn)行執(zhí)行的公黑,即約定優(yōu)于配置(Convention Over Configuration)邑商。

目錄結(jié)構(gòu)

由上圖可知,maven默認(rèn)生成的源碼目錄為src\main\java凡蚜,默認(rèn)的資源目錄為src\main\resources人断,默認(rèn)的測試目錄為src\test\java。如果此工程已經(jīng)完成朝蜘,直接進(jìn)行編譯恶迈、測試等構(gòu)建過程的話,則會直接到默認(rèn)目錄執(zhí)行編譯谱醇、測試活動暇仲。

該目錄結(jié)構(gòu)屬于約定的一種內(nèi)容,因?yàn)槠綍r建立工程目錄時多按照該結(jié)構(gòu)設(shè)計(jì)副渴,所以在maven中直接生成該目錄結(jié)構(gòu)奈附,避免了人工的操作≈缶纾可以自定義源碼和編譯后目錄斥滤,只需要在pom.xml文件中指定,則編譯構(gòu)建服務(wù)時按照指定的目錄進(jìn)行勉盅。

以源碼目錄佑颇、測試目錄和資源目錄三種為例,可以指定源路徑以及編譯后目錄:

    <build>
        <!--編譯服務(wù)后的目標(biāo)生成目錄-->
        <directory>${basedir}\target</directory>

        <!--源碼目錄和編譯后源碼生成目錄-->
        <sourceDirectory>${basedir}\src\main\java</sourceDirectory>
        <outputDirectory>${build.directory}\classes</outputDirectory>

        <!--源碼下資源路徑和編譯后資源生成路徑-->
        <resources>
            <resource>
                <directory>${basedir}\src\main\resources</directory>
                <targetPath>${build.directory}\classes</targetPath>
            </resource>
        </resources>

        <!--測試路徑和編譯后測試生成路徑-->
        <testSourceDirectory>${basedir}\src\test\java</testSourceDirectory>
        <testOutputDirectory>${build.directory}\test-classes</testOutputDirectory>
    </build>

<build>標(biāo)簽中自定義文件路徑時草娜,可以使用文件系統(tǒng)的全路徑挑胸,也可以使用maven的內(nèi)置屬性進(jìn)行定義。這里的${basedir}表示工程根目錄宰闰,${build.directory}表示編譯服務(wù)后的目標(biāo)生成目錄茬贵,即<directory>標(biāo)簽定義的目錄。

maven工程內(nèi)部存在許多可以使用的內(nèi)置屬性议蟆,以源碼和測試為例:
${build.sourceDirectory}: 源碼文件目錄
${build.outputDirectory}: 源碼編譯后目錄
${build.testSourceDirectory}: 測試文件目錄
${build.testOutputDirectory}: 測試文件編譯后目錄

服務(wù)構(gòu)建

maven工程的構(gòu)建過程存在三個生命周期:clean,defaultsite闷沥,每個生命周期存在多個階段。clean生命周期的作用為清理工程編譯后生成信息咐容;site生命周期用于為工程生成站點(diǎn)舆逃,可以通過瀏覽器查看各項(xiàng)站點(diǎn)信息;下面主要討論default生命周期的作用,該生命周期包含多個階段路狮,主要完成工作如下:

  • validate: 對工程信息進(jìn)行校驗(yàn)虫啥,判斷是否缺失必要的文件
  • compile: 編譯源碼
  • test: 使用測試框架執(zhí)行測試文件
  • package: 對編譯后文件進(jìn)行打包,生成jarwar等格式文件
  • verify: 對集成測試結(jié)果進(jìn)行校驗(yàn)奄妨,判斷是否達(dá)到質(zhì)量標(biāo)準(zhǔn)
  • install: 按照打包文件到本地倉庫
  • deploy: 將打包文件部署到遠(yuǎn)程服務(wù)器

在生命周期內(nèi)涂籽,對指定階段的執(zhí)行,會執(zhí)行該階段前的所有階段砸抛,例如執(zhí)行mvn test命令评雌,實(shí)際執(zhí)行的階段有validate、compile直焙、test景东。

之前提到過,maven的服務(wù)構(gòu)建過程是通過插件來完成的奔誓,即每個階段要執(zhí)行的操作斤吐,都是通過插件定義實(shí)現(xiàn)的。每個插件可以定義多個goal厨喂,所以并不是每個階段對應(yīng)一個插件和措,而是對應(yīng)插件的一個goal。通過將生命周期的階段與插件的goal進(jìn)行綁定蜕煌,在使用過程中只需要聲明要執(zhí)行的聲明周期階段派阱,即可調(diào)用綁定的插件goal完成操作。例如執(zhí)行mvn install命令幌绍,實(shí)際執(zhí)行的是install生命周期階段綁定的插件的goal颁褂。

上圖中Profiles表示使用到的配置,Lifecycle列舉了常用的生命周期階段傀广,Plugins列舉了常用插件及插件的goal颁独,這里并沒有顯示出階段與goal的綁定關(guān)系。下面展示的是maven 3.6.0版本中伪冰,打包類型為jar時誓酒,default生命周期中各階段與插件goal的綁定關(guān)系:

    <component>
      <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
      <role-hint>jar</role-hint>
      <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
      <configuration>
        <lifecycles>
          <lifecycle>
            <id>default</id>
            <!-- START SNIPPET: jar-lifecycle -->
            <phases>
              <process-resources>
                org.apache.maven.plugins:maven-resources-plugin:2.6:resources
              </process-resources>
              <compile>
                org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
              </compile>
              <process-test-resources>
                org.apache.maven.plugins:maven-resources-plugin:2.6:testResources
              </process-test-resources>
              <test-compile>
                org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile
              </test-compile>
              <test>
                org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test
              </test>
              <package>
                org.apache.maven.plugins:maven-jar-plugin:2.4:jar
              </package>
              <install>
                org.apache.maven.plugins:maven-install-plugin:2.4:install
              </install>
              <deploy>
                org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy
              </deploy>
            </phases>
            <!-- END SNIPPET: jar-lifecycle -->
          </lifecycle>
        </lifecycles>
      </configuration>
    </component>

由綁定關(guān)系可知,執(zhí)行mvn install命令時贮聂,install階段運(yùn)行的是mvn org.apache.maven.plugins:maven-install-plugin:2.4:install靠柑,該命令格式為mvn groupId:artifactId:version:goal

多模塊

以上示例展示了創(chuàng)建maven工程時的默認(rèn)目錄結(jié)構(gòu)吓懈,并沒有存在繼承或者聚合的情況歼冰。在實(shí)際工作中,多數(shù)的項(xiàng)目結(jié)構(gòu)較為復(fù)雜耻警,例如工程中經(jīng)常需要劃分dao層隔嫡、service層和web層甸怕,為了保證各層的獨(dú)立性和降低各層之間的耦合度,這種情況下可以給工程建立多個模塊分開管理腮恩。

右鍵工程梢杭,New > Module,進(jìn)入模塊信息窗口

新建子模塊秸滴,默認(rèn)繼承自父模塊

可以觀察到父模塊的pom.xml文件增加新內(nèi)容

<packaging>類型自動變?yōu)?code>pom類型武契,<modules>包含兩個新創(chuàng)建的子模塊。

maven工程的默認(rèn)打包類型為jar荡含,聚合情況下的父模塊打包類型默認(rèn)為pom類型咒唆,因?yàn)橐话愀改K只存在一個pom.xml文件,不包含其他類型文件内颗,其作用為提供根pom.xml文件給多個子模塊使用钧排。

子模塊的pom.xml文件內(nèi)容中敦腔,通過<parent>標(biāo)簽聲明繼承關(guān)系均澳,繼承父模塊的groupIdversion,所以子模塊pom中只需要填寫一個artifactId即可符衔。

繼承和聚合略有不同找前,繼承關(guān)系中,被繼承的pom并不知道自身被哪些工程繼承判族,具體工程則明確知道繼承哪個pom躺盛;聚合關(guān)系中,根pom中明確聲明了包含哪些子模塊形帮,模塊則并不感知被哪些pom包含槽惫。在該示例中,繼承和聚合同時存在辩撑。

通過繼承pom的方式界斜,可以有效的在多模塊工程中對依賴的構(gòu)件進(jìn)行版本控制,避免不同模塊之間對同一個依賴構(gòu)件的使用合冀,存在版本不一致問題各薇。各模塊示例依賴如下:

module_A:

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.7</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
    </dependencies>

模塊module_A依賴junitlog4j

module_B:

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.7</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

模塊module_B依賴junit

當(dāng)module_Amodule_B都存在對同一個構(gòu)件junit:junit:4.7的依賴時,可以將該構(gòu)件提取到根pom文件的<dependencies>中君躺,子模塊繼承根pom時會自動添加對該構(gòu)件的使用峭判。如下所示:

root:

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.7</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

在根pom中聲明對構(gòu)件junit:junit:4.7的依賴。

module_A:

    <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
    </dependencies>

模塊module_A繼承對junit的依賴棕叫,只需要聲明log4j依賴即可林螃。

模塊module_B同樣繼承對junit的依賴,<dependencies>聲明依賴為空俺泣,不需要該標(biāo)簽疗认。

在根pom中聲明依賴急侥,子模塊自動繼承依賴的方式,雖然可以統(tǒng)一工程中使用的構(gòu)件版本號侮邀,但是當(dāng)根pom中聲明依賴較多時坏怪,可能會造成一些構(gòu)件泛濫,即有些子模塊并需要如此多的依賴绊茧。

可以在根pom中配置<dependencyManagement>標(biāo)簽铝宵,在標(biāo)簽內(nèi)列出子模塊可能需要使用的構(gòu)件及版本,當(dāng)子模塊使用到其中的構(gòu)件時华畏,在子模塊內(nèi)部聲明構(gòu)件的groupIdartifactId即可鹏秋,以此進(jìn)行版本控制。示例如下:

root:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.7</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.12</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

在根pom中列出子模塊可能使用的依賴亡笑,此時并不會下載使用這些依賴侣夷。

module_A:

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </dependency>
    </dependencies>

模塊module_A中聲明使用junitlog4j依賴,此時子模塊會下載使用根pom中聲明版本號的對應(yīng)依賴仑乌。

module_B:

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>

模塊module_B中聲明使用junit依賴百拓,此時子模塊會下載使用根pom中聲明版本號的對應(yīng)依賴。

依賴范圍與依賴傳遞

觀察之前對junit構(gòu)件的依賴聲明:

            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.7</version>
                <scope>test</scope>
            </dependency>

在聲明的依賴信息中晰甚,除了坐標(biāo)之外衙传,還具有scope屬性,該屬性即為構(gòu)件的范圍屬性厕九。某些scope屬性指示了構(gòu)件是否具有傳遞性蓖捶。

當(dāng)工程A依賴工程B,工程B依賴工程C時扁远,則工程A可能會加載工程B的依賴缚俏,即工程C肉拓,該情況稱為依賴傳遞,ABBC稱為直接依賴碗暗,AC稱為間接依賴虾啦。

maven依賴聲明中主要有以下六種依賴范圍:

  • compile: 默認(rèn)依賴范圍乓梨,作用于工程的編譯瞄桨、測試和運(yùn)行期,并且會傳遞到依賴該模塊的工程中

  • provided: 作用于工程的編譯和測試階段洒宝,在運(yùn)行期不起作用购公,用于表示運(yùn)行期對該構(gòu)件的依賴已經(jīng)由容器提供,該依賴范圍不具有傳遞性

  • runtime: 作用于測試和運(yùn)行階段雁歌,在編譯期不起作用宏浩,具有傳遞性

  • test: 作用于測試和運(yùn)行階段,在編譯期不起作用靠瞎,且不具有傳遞性

  • system:provided類似比庄,作用于工程的編譯和測試階段求妹,在運(yùn)行期不起作用,不過需要<systemPath>標(biāo)簽顯式指明使用的是系統(tǒng)上的某個依賴

  • import: 只能使用于<dependencyManagement>標(biāo)簽中對包類型為pom的構(gòu)件依賴佳窑,使用該范圍后制恍,會將依賴的pom<dependencyManagement>標(biāo)簽內(nèi)的依賴加載到當(dāng)前<dependencyManagement>標(biāo)簽中。該范圍對傳遞性沒有影響

各范圍傳遞性:

依賴范圍 編譯期 測試期 運(yùn)行期 傳遞性
compile Y Y Y Y
test - Y Y -
provided Y Y - -
runtime - Y Y Y

AB依賴范圍定義如左側(cè)一列神凑,BC依賴范圍如上面一行净神,則AC的依賴性如下:

systemprovided類似,import只做引入<dependencyManagement>標(biāo)簽內(nèi)容的作用溉委,對傳遞性沒有影響鹃唯,所以這兩個scope屬性沒有列出來。

compile test provided runtime
compile compile - - runtime
test test - - test
provided provided - - provided
runtime runtime - - runtime

根據(jù)表格結(jié)果可知瓣喊,test坡慌、provided兩個scope屬性不具有傳遞性,所以BC依賴范圍為這兩個屬性值的列藻三,AC的依賴不存在洪橘;AB的依賴范圍為這兩個屬性值的行,傳遞過來的依賴性降低為這兩個屬性值趴酣。compile梨树、runtime兩個scope屬性具有傳遞性,runtime作用范圍低于compile岖寞,按照木桶原則,構(gòu)件傳遞時按照最小范圍傳遞柜蜈,AB的依賴范圍為runtime的行仗谆,AC的依賴性降為runtimeAB的依賴范圍為compile的行淑履,AC的依賴性降低為BC的依賴性隶垮。

因?yàn)榇嬖趥鬟f依賴的情況,所以可能會存在間接依賴構(gòu)件版本不一致的情況秘噪,即依賴沖突狸吞。maven選擇使用的構(gòu)件版本規(guī)則為 最短路徑優(yōu)先,若存在 A->B->C->D 2.0A->E->D 1.0的情況指煎,則在工程A中選擇的構(gòu)件D版本為1.0蹋偏。若兩條路徑長度相同,則選擇最先聲明使用的構(gòu)件至壤,即 最先聲明優(yōu)先威始。

參考

https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
https://blog.csdn.net/luanlouis/article/details/50492163
http://www.cnblogs.com/dcba1112/archive/2011/05/01/2033805.html
https://haoran-10.iteye.com/blog/2307081

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市像街,隨后出現(xiàn)的幾起案子黎棠,更是在濱河造成了極大的恐慌晋渺,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脓斩,死亡現(xiàn)場離奇詭異木西,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)随静,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門户魏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人挪挤,你說我怎么就攤上這事叼丑。” “怎么了扛门?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵鸠信,是天一觀的道長。 經(jīng)常有香客問我论寨,道長星立,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任葬凳,我火速辦了婚禮绰垂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘火焰。我一直安慰自己劲装,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布昌简。 她就那樣靜靜地躺著占业,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纯赎。 梳的紋絲不亂的頭發(fā)上谦疾,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機(jī)與錄音犬金,去河邊找鬼念恍。 笑死,一個胖子當(dāng)著我的面吹牛晚顷,可吹牛的內(nèi)容都是我干的峰伙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼音同,長吁一口氣:“原來是場噩夢啊……” “哼词爬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起权均,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤顿膨,失蹤者是張志新(化名)和其女友劉穎锅锨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恋沃,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡必搞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了囊咏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恕洲。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖梅割,靈堂內(nèi)的尸體忽然破棺而出霜第,到底是詐尸還是另有隱情,我是刑警寧澤户辞,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布泌类,位于F島的核電站,受9級特大地震影響底燎,放射性物質(zhì)發(fā)生泄漏刃榨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一双仍、第九天 我趴在偏房一處隱蔽的房頂上張望枢希。 院中可真熱鬧,春花似錦朱沃、人聲如沸苞轿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呕屎。三九已至,卻和暖如春敬察,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背尔当。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工莲祸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人椭迎。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓锐帜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親畜号。 傳聞我的和親對象是個殘疾皇子缴阎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Maven使用入門 1. Maven概述 Maven是什么?Maven項(xiàng)目對象模型(POM)简软,可以通過一小段描述信...
    小小韓_小小紅閱讀 2,508評論 2 28
  • 以前也只是用過最基本的東西 現(xiàn)在重新比較系統(tǒng)的學(xué)習(xí)整理一遍 一 :為什么使用Maven 1.Maven更好的管...
    SkyLine7閱讀 1,088評論 9 16
  • Maven 使用指南 配圖筆記蛮拔,這里只記錄圖里面不好表達(dá)都述暂。 簡介 倉庫 本地倉庫配置 在setting.xml中...
    行者N閱讀 2,256評論 0 3
  • 簡介 概述 Maven 是一個項(xiàng)目管理和整合工具 Maven 為開發(fā)者提供了一套完整的構(gòu)建生命周期框架 Maven...
    閩越布衣閱讀 4,277評論 6 39
  • Maven 網(wǎng)址 Maven 官方網(wǎng)站,官方網(wǎng)站有關(guān)于 Maven 的一切建炫。Maven 百度百科 Maven 是什...
    被稱為L的男人閱讀 33,811評論 3 16