使用Eclipse-Maven-git作Java開發(17)--maven項目初步

        本系列博文有很長一段時間沒有更新了,一切源於這期間由一些其餘時請須要處理,同時本身也有點鬆懈了,接下來須要追遇上來了。css

        本文將演示使用eclipse中的maven進行簡單的項目的依賴管理、打包配置以及進行打包。java

0、準備工做

        eclipse中建立全空的maven項目(packaging爲jar),若是不清楚的,能夠參考前面的文章。mysql

        剛建立完成以後,文件樹是這樣的git

BlogExample2
├── .classpath
├── .git
│   ├── branches
│   ├── config
│   ├── FETCH_HEAD
│   ├── HEAD
│   ├── hooks
│   ├── index
│   ├── logs
│   │   ├── HEAD
│   │   └── refs
│   │       ├── heads
│   │       │   └── master
│   │       └── remotes
│   │           └── origin
│   │               └── master
│   ├── objects
│   │   ├── 09
│   │   │   └── 0de75a2fb3f838ed0e09b06245beac15375223
│   │   ├── 36
│   │   │   └── c8b0cdf2d254b97d1dbd56873a5e5ff3c89402
│   │   ├── aa
│   │   │   └── 461803a95b3ebff7356772ea379029694fce09
│   │   ├── d6
│   │   │   └── 9a0381ef76acc3e0cd248aae28de88b5b00c95
│   │   ├── db
│   │   │   └── 9ae43e25a6aa124f886fd9dccbff8c4ffdf81f
│   │   ├── info
│   │   └── pack
│   │       ├── pack-b98bb4645cb790f02c640335d24f5a934ea93be8.idx
│   │       └── pack-b98bb4645cb790f02c640335d24f5a934ea93be8.pack
│   └── refs
│       ├── heads
│       │   └── master
│       ├── remotes
│       │   └── origin
│       │       └── master
│       └── tags
├── .gitignore
├── LICENSE
├── pom.xml
├── .project
├── README.md
├── .settings
│   ├── org.eclipse.core.resources.prefs
│   ├── org.eclipse.jdt.core.prefs
│   └── org.eclipse.m2e.core.prefs
└── target
    ├── classes
    └── test-classes

一、配置編碼

        爲了不和解決各類因爲編碼不一致致使的問題,咱們須要對咱們的項目配置統一的編碼,通常設置爲UTF-8編碼,須要在pom.xml中配置github

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>

二、配置依賴

        咱們常常須要依賴其餘的庫來完成代碼編寫,通常咱們能夠在相關庫的介紹中找到maven依賴配置信息,若是沒有,能夠經過maven中央倉庫進行搜索。web

        對於一個依賴,咱們通常須要配置3項:groupId、artifactId、version,對於少數狀況,咱們還須要配置scope。前三項是惟一肯定依賴庫的三元素,後面那一項是爲了告訴maven這個依賴的使用範圍。spring

        假設咱們須要依賴mysql的jdbc驅動,咱們須要配置:sql

<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${version.mysql-jdbc}</version>
        <scope>${prop.depScope}</scope>
    </dependency>
</dependencies>

        這個,我將版本和範圍都使用了變量的方式來配置,這兩個變量須要在標籤<properties>中進行配置,如:apache

<properties>
    <version.mysql-jdbc>5.1.38</version.mysql-jdbc>
    <prop.depScope>provided</prop.depScope>
</properties>

        採用這種變量的方式配置,好處在於能夠重複使用這個變量,由於有一些依賴庫是須要配置幾個依賴的,如spring、log4j2,這樣就能夠作到一改全改,方便維護,請看這個:api

<properties>
    <version.spring>4.2.6.RELEASE</version.spring>
    <version.log4j>2.5</version.log4j>
    <prop.depScope>compile</prop.depScope>
</properties>
<dependencies>
    <!-- spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${version.spring}</version>
        <scope>${prop.depScope}</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${version.spring}</version>
        <scope>${prop.depScope}</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${version.spring}</version>
        <scope>${prop.depScope}</scope>
    </dependency>

    <!-- 日誌 -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-jcl</artifactId>
        <version>${version.log4j}</version>
        <scope>${prop.depScope}</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-web</artifactId>
        <version>${version.log4j}</version>
        <scope>${prop.depScope}</scope>
    </dependency>
</dependencies>

三、配置打包插件

        配置了依賴,就能夠愉快的寫代碼了,而後代碼攜帶必定時候就須要打包、測試了,這個時候就須要配置相應的打包的配置了。maven默認的關於打包的配置已經使得你可以不進行任何配置了,可是對於某些有特別需求的場景還時須要進行配置的。

        除了

<packaging>xxxx</packaging>

        這個配置之外,全部的關於打包的配置都在<build>標籤裏面,主要是關於源代碼文件路徑、配置文件路徑、輸出文件名、輸出路徑、編譯參數、打包包含和排除文件、javadoc生成等等。不少都是以插件的形式提供,也有部分配置是直接標籤進行配置,官方插件能夠參看官方的文檔進行配置。

<properties>
    <version.java>1.8</version.java>
    <version.javadoc>8</version.javadoc>
    <version.compiler-plugin>3.5.1</version.compiler-plugin>
    <version.war-plugin>2.6</version.war-plugin>
    <version.clean-plugin>3.0.0</version.clean-plugin>
    <version.resources-plugin>2.7</version.resources-plugin>
    <version.surefire-plugin>2.19.1</version.surefire-plugin>
    <version.jar-plugin>2.6</version.jar-plugin>
    <version.source-plugin>3.0.0</version.source-plugin>
    <version.javadoc-plugin>2.10.3</version.javadoc-plugin>
    <version.gpg-plugin>1.6</version.gpg-plugin>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${version.compiler-plugin}</version>
            <configuration>
                <source>${version.java}</source>
                <target>${version.java}</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>${version.jar-plugin}</version>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>${version.war-plugin}</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>${version.source-plugin}</version>
            <executions>
                <execution>
                    <id>attach-sources</id>
                    <goals>
                        <goal>jar-no-fork</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <attach>true</attach>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>${version.javadoc-plugin}</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <links>
                    <link>http://docs.oracle.com/javase/${version.javadoc}/docs/api</link>
                </links>
            </configuration>
        </plugin>
    </plugins>
</build>

        在配置插件的時候,對於groupId爲org.apache.maven.plugins的插件其實時能夠不用配置groupId的,可是配置上看起來更完整一些。

        下面來配置一個關於使用第三方插件爲javaFX應用打包系統直接能夠運行程序的包的配置。

<properties>
    <version.maven-assembly-plugin>2.6</version.maven-assembly-plugin>
    <version.javafx-maven-plugin>8.4.0</version.javafx-maven-plugin>
</properties>
<build>
    <finalName>JavaFXnative</finalName>
    <plugins>
        <plugin>
            <groupId>com.zenjava</groupId>
            <artifactId>javafx-maven-plugin</artifactId>
            <version>${version.javafx-maven-plugin}</version>
            <configuration>
                <!-- 啓動類 -->
                <mainClass>com.zycoo.billing.Main</mainClass>
                <!-- 運行文件名 -->
                <appName>${project.build.finalName}-${project.version}</appName>
                <!-- 圖標的位置 -->
                <deployDir>${basedir}/src/deploy</deployDir>
                <!-- 菜單 -->
                <needMenu>true</needMenu>
                <!-- 桌面圖標 -->
                <needShortcut>true</needShortcut>
                <!-- 公司名稱 -->
                <vendor>zycoo</vendor>
            </configuration>
        </plugin>
    </plugins>
</build>

       插件的github地址和官方文檔說明請看這裏

四、打包和本地安裝

        關於打包,很簡單,在項目上面右鍵-run as-maven build/maven install等等,只不過build的時候通常會叫你輸入運行的命令,通常狀況下都填寫「clean package」,這至關於直接在命令行運行「mvn clean package」。

       對於上面的javaFX打包,由於自己須要執行「mvn clean jfx:native」因此須要輸入「clean jfx:native」.

五、配置父模塊

        相似於面向對象中的父類,maven支持本pom.xml繼承於某一packaging類型爲pom的模塊,以便於實現配置的集中管理。

       各大開源項目都使用了這種方式進行配置。

       配置使用標籤<parent>配置,下面進行舉例:

<parent>
        <groupId>cn.songxinqiang</groupId>
        <artifactId>oss-parent</artifactId>
        <version>1.6</version>
    </parent>

六、小結

        本文雖然對通常的maven項目的配置的各個方面都涉及說明了,可是對於不少具體的、特殊的需求並無很深刻的講解,畢竟本文只是一篇入門的文章,不少「高級」的用法都還須要慢慢在實際使用中進行摸索。後續會繼續推出maven使用的文章,屆時會專一於某一個小的方面的問題進行講述,那就會詳細得多。

       本文涉及的不少通用的配置,我都做爲開源項目託管到git上面了,請參看下面的地址:

               https://git.oschina.net/songxinqiang/OSSParent

               https://git.oschina.net/songxinqiang/SSMVParent

       同時也發佈到了maven中央倉庫,你若是想使用的話,直接配置<parent>標籤便可:

<parent>
        <groupId>cn.songxinqiang</groupId>
        <artifactId>oss-parent</artifactId>
        <version>1.6</version>
    </parent>
<parent>
        <groupId>cn.songxinqiang</groupId>
        <artifactId>ssmv-parent</artifactId>
        <version>1.0.1</version>
    </parent>

          若有不對的地方,還望指正!!

          enjoy!

相關文章
相關標籤/搜索