轉:如何將 Java 項目轉換成 Maven 項目 如何將 Java 項目轉換成 Maven 項目

如何將 Java 項目轉換成 Maven 項目

本文內容

  • Java 項目
  • Maven 項目
  • Java 項目轉換成 Maven 項目

本文主要介紹如何將 Java 項目轉換成 Maven 項目。首先要明確的是,用 Maven 管理 Java 項目的確方便。它帶給你直觀的方即是:你不用在網上找 Jar 包,而後把它複製到 lib 目錄,再在項目中引用它。而只需向 pom.xml 寫入你須要的 Jar 包依賴,Maven 就能自動從本地倉庫或遠程倉庫下載,並引用……html

如何將通常的 Java 項目轉換成 Maven 項目?當你瞭解了 Java 項目與 Maven 項目在結構上的區別後,就能很容易地在它們之間進行轉換,而不用侷限於各類網絡或書上的資料上所描述的方法(有些方法至關不靠譜,照貓畫虎,知其然不知其因此然)。java

本文假設你已經成功安裝了 Maven。程序員

個人 Eclipse 版本是 Eclipse eclipse-jee-mars-R-win32-x86_64 版本 4.5.0,Build id 爲 20150621-1200,Maven 是 3.3.3。編程

Java 項目


用 Eclipse 建立一個 Java 項目,選擇「File –> New -> Jave Project」,新建名爲「JavaDemo」的項目。網絡

文件系統目錄結構以下圖所示,之因此強調文件系統,是爲了區分項目在 Eclipse 中的目錄結構:eclipse

2015-08-13_0957552015-08-13_100011

圖 1 左:Java 項目在文件系統中的結構;右: Java 項目在 Eclipse 中的結構maven

說明:編輯器

  • src 目錄,是源代碼目錄;
  • .classpath 文件,用來描述程序編譯的 classpath。好比,上面創建的 Java 項目,該文件的可能內容是:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

指定了源文件的位置爲 src 目錄;con 容器爲 JRE,標準 VM(虛擬機),Java 8 等信息;編譯輸出位置爲 bin 目錄。固然,還能夠有 lib 目錄。你能夠想象,該文件實際上指定了 Java 項目在邏輯結構與文件系統的物理結構之間的對應關係。post

  • .project 文件,是項目文件,好比,仍是上面項目,該文件的可能內容是:
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>JavaDemo</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>org.eclipse.jdt.core.javanature</nature>
    </natures>
</projectDescription>

指定了項目名稱 JavaDemo,項目描述信息,生成命令,核心等信息。測試

接下來,再看看 Maven 項目是什麼樣的。

Maven 項目


用 Eclipse 新建一個 Maven 項目,選擇「File –> New-> Other」,找到「Maven –> Maven Project」,Archetype 選擇「quickstart」,Group ID 和 Artifact Id 都爲 mavenDemo,

 

 

 

 

 

2015-08-13_102951 2015-08-13_102858

圖 2 左:Maven 項目在文件系統中的結構;右:Maven 項目在 Eclipse 中的結構

說明:

  • 上圖左邊,Maven 項目比 Java 項目多了 pom.xml,即 Project Object Model,該文件本文就不介紹了;

上圖右邊,Eclipse 的內容變化就比較多了,甚至連項目圖標都變了,右上角有個「J」,左上角多個「M」,包括:

  • 源文件位置,Java 項目只有 src,而 Maven 在 src 下又區分了 main 和 test,其中 main 是主代碼,test 是測試代碼,顯示樣式也有變化,如 src/main/java。若是你看下 Maven 的文件系統結構,其實它們都是文件夾。能夠想象,當咱們修改代碼後,可讓 Maven 進行測試,測試完成後,生成 Jar 包,而 Jar 包中不包含測試代碼。這就是如此劃分的好處;
  • target 目錄,跟 Java 項目的 bin 目錄做用同樣;
  • Maven Dependencies,Java 項目有 lib 目錄,用來放置你使用的三方 Jar 包。當採用 Maven 時,lib 目錄就沒用了。Maven 的主要做用是管理項目依賴,它能夠從本地倉庫或遠程倉庫得到你須要的 Jar 包,即使是你本身寫的 Java 項目,也徹底不用再配置「Configure Build Path」,只需向 pom.xml 添加 dependency 節點,寫上你引用項目的 Group Id 和 Artfact Id,就能直接引用。想象一下,若是沒有 Maven,當你使用三方 Jar 包時,一般會先創建一個 lib 目錄,而後把 Jar 包複製到這裏,再經過「Configure Build Path」 引用它們,有了 Maven 後,這些步驟,就通通不用了(差點忘了,你還得在網上找到你須要的 Jar 包,並下載本地);
  • .classpath 文件,跟 Java 項目區別不大,但內容會不一樣,好比,上面新建的 Maven 項目,該文件的可能內容是:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/classes" path="src/main/java">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="src" output="target/test-classes" path="src/test/java">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="output" path="target/classes"/>
</classpath>
注意,classpathentry 的 kind 屬性同 Java 項目中的同樣,也有「src」、「con」、「output」,但比 Java 項目多,好比,關於 src 的就有兩個。但其屬性就有區別了,好比,kind 爲 src 的 classpathentry,分別有 path=src/main/java 和 path=src/test/java,指示主代碼和測試代碼的位置。
  • .project 文件,好比,仍是上面 Maven 項目,該文件的可能內容是:
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>mavenDemo</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.m2e.core.maven2Builder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>org.eclipse.jdt.core.javanature</nature>
        <nature>org.eclipse.m2e.core.maven2Nature</nature>
    </natures>
</projectDescription>

Maven 的 .project 文件,除了有關於 Java 的,還添加了它本身的。

本質上,Maven 接管了 Java 項目的管理。

Java 項目轉換 Maven 項目


首先,右鍵選擇 JavaDemo,選擇「Configure –> Convert to Maven Project」, 填寫「Group ID」和「Artifact Id」都爲「JavaDemo」。如圖 3 所示:

2015-08-13_113514

圖 3 Java 項目編程 Maven 項目

能夠看到,項目圖標變了,多了 pom.xml,Maven Dependencies,target 等。但 src 代碼位置不對,沒有指示出主代碼和測試代碼。

但願你還有印象,前面兩小節,對 Java 項目和 Maven 項目的 .classpath 文件進行的比較。所以,IDE 在轉換時沒有自動修改 .classpath 文件。

而你只需在文件系統下,在 src 目錄下創建 main 和 test 子目錄,並在它們下再分別創建 java 子目錄。也就是,src/main/java,src/test/java。而後修改 .classpath 文件,或用一個現成的 Maven .classpath 文件覆蓋它便可。

將:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/classes" path="src">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="output" path="target/classes"/>
</classpath>

改爲:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/classes" path="src/main/java">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="src" output="target/test-classes" path="src/test/java">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="output" path="target/classes"/>
</classpath>

此時,JavaDemo 這個項目就會變成如圖 4 所示,若是你着急,就按 F5 刷新。

2015-08-13_114418

圖 4 Java 項目轉換成 Maven 項目

如今,這個 Java 項目就跟 Maven 建立的項目同樣了。

瞭解這個原理,你也能將 Maven 項目轉換成 Java 項目。

另外,你會發現 Eclipse 這個 IDE 一個方便的地方是,即使 Eclipse 已經打開了你的項目,你也能夠在操做系統的資源管理器上隨意操做文件和文件夾(固然,我說的是 Windows 操做系統),這跟一些其餘的 IDE 不一樣,好比微軟的 VS,你就不能這麼幹,緣由很簡單,對一個 IDE 正在訪問的文件,又在操做系統的資源管理裏對文件進行剪切或刪除,IDE 顯然不會答應。可是 Eclipse 就跟 Notepad 或 UE 這些文本編輯器似的,會監視文件,但不會阻止你作你想作的事,給程序員最大的靈活度和自由度,這也是 Java 的理念之一。因此,在 Maven 項目與 Java 項目進行轉換成,無所謂先進行哪步,後進行哪步,如圖 3,項目中有 pom.xml 文件了,即使 .classpath 文件不正確,那麼這個項目的圖標也會已變成 Maven 圖標,以前的 bin 目錄或 lib 目錄也會存在,雖然 Maven 徹底不須要它們,並且主代碼和測試代碼的顯示也徹底不對,甚至,還會出現徹底按操做系統的一級又一級……的目錄結構來顯示,而不是邏輯結構——Java 包的方式來顯示~若是最終全部的修改達到 Maven的要求,它就能正確顯示結構。

相關文章
相關標籤/搜索