<!-- dmo通常定義bean commons裏面通常定義工具類 biz裏面是業務邏輯 provider是對外開放的接口 main是服務的啓動 鑑於代碼如此分佈,依賴關係通常也是按此順序,因此在modules中定義模塊,須要根據依賴順序安排前後 --> <modules>
<module>service-outgate-dmo</module>
<module>service-outgate-commons</module>
<module>service-outgate-biz</module>
<module>service-outgate-provider</module>
<module>service-outgate-main</module>
</modules>
<!-- 模塊之間存在依賴關係,須要弄清楚模塊之間的依賴順序,編譯的時候被依賴者放到modules元素中的靠前位置。 模塊若是互相依賴,要注意編譯順序。 儘可能避免模塊之間的循環依賴 --> <modules>
<module>service-video-dmo</module>
<module>service-video-commons</module>
<module>service-video-biz</module>
<module>service-video-provider</module>
<module>service-video-main</module>
</modules>
<!-- maven多級項目,須要考慮同級父項目的子項目間的依賴關係,並行開發的服務,最好中間不要產生依賴。 不一樣業務的請求和響應對象,在分項目的時候,不一樣業務以前的bean儘可能不要產生依賴。子項目間的複雜 依賴關係,後致使後期項目編譯依賴過於繁瑣。致使pom文件的依賴很差定義,會使之往更糟糕的方向發展。 --> <modules>
<module>service-user</module>
<module>service-outgate</module>
<module>service-video</module>
<module>service-msg</module>
</modules>
以上可能出現的問題就是,編譯找不到類的方法。web
在Nexus中依賴有pom沒有jar,通常pom裏面都是有jar的地址信息,maven去下載的時候下載不下來,多是由於網絡,多是由於jar服務提供上收費,這種狀況下,通常建議本地安裝jar到Nexus,不到第三方下載,將jar安裝在Nexus的thirtyParty目錄apache
${basedir} 項目根目錄 bash
${project.build.directory} 構建目錄,缺省爲target 網絡
${project.build.outputDirectory} 構建過程輸出目錄,缺省爲target/classes maven
${project.build.finalName} 產出物名稱,缺省爲${project.artifactId}-${project.version} 編輯器
${project.packaging} 打包類型,缺省爲jar ide
${project.xxx} 當前pom文件的任意節點的內容 工具
Profile爲不一樣的環境能夠配置不一樣的打包要求,在profile中能夠覆蓋pom中的幾乎全部元素。在打包運行的時候須要在命令行傳參指定運行那個Profile,這個參數就是profile的id.測試
<profile>
<id>local</id>
<properties>
<context.conf.path>classpath:config/properties/config_local.properties</context.conf.path>
</properties>
<activation> <activeByDefault>true</activeByDefault> </activation> </profile>
<profile>
<!-- 開發環境 --> <id>dev</id>
<properties>
<context.conf.path>classpath:config/properties/config_dev.properties</context.conf.path>
</properties>
</profile>
<profile>
<!-- 測試環境 --> <id>test</id>
<properties>
<context.conf.path>classpath:config/properties/config_test.properties</context.conf.path>
</properties>
</profile>
</profiles>
假如打包本地環境,命令爲:ui
mvn clean install –Plocal
此種方式,是手動激活,指定運行某種環境構建。
能夠經過在profile中配置激活策略,當構建環境知足某些構建策略時,進行某個profile的構建。激活配置放在上面加粗標紅的元素裏。
Profile能夠單獨成立文件,引入到pom。也能夠在私服的settings.xml中設置全局的profile,被全部項目共享。
pluginManagerment通常使用在父pom中,用來管理全部子項目須要用到的插件。在父pom中,聲明插件全部的基本信息(版本號,JDK版本等等),在子pom中使用使用插件只需groupId,artifactId便可,無需配置其餘的額外信息,這樣能夠作到全部子項目使用一樣的插件配置。若是子項目,須要使用不一樣的參數配置,在子pom中能夠自行聲明。
在父pom中管理全部子項目可能須要使用到的插件,子項目不聲明使用父pom中的插件,則子項目就不會用到該插件。
父pom中的配置:
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1</version>
<configuration>
<attach>true</attach>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
子pom中的配置:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
</plugin>
</plugins>
pluginManagement裏只是聲明依賴,並不實現引入,所以子項目須要顯式的聲明須要用的依賴。Plugins則相反,聲明的都會引入。
Dependencys和dependencyManager是同同樣的道理。
要找出文件亂碼的根源,就須要知道編碼的流程。從編寫文件到打成發佈包,中間經歷幾回轉碼。
首先編寫文件,編輯器或IDE會默認爲文件指定編碼。
其次文件會通過編譯器編譯,不過配置文件,應該不會被編譯器處理。
Copy文件到要打的包中,這個過程maven是怎麼獲取編碼方式的,默認取機器編碼,仍是獲取項目文件編碼,或者是在pom文件中指定編碼變量供其讀取使用。
Maven獲取編碼的順序應該是:
若是爲指定project.build.sourceEncoding編碼,maven使用默認,指定則使用指定。插件也能夠指定編碼,若是插件指定了編碼,則使用插件自身指定的編碼。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<configuration>
<encode>utf-8</encode>
</configuration>
在以前的版本中關閉防火牆等服務的命令是
service iptables stop
/etc/init.d/iptables stop
在RHEL7中,其實沒有這個服務
[root@rhel7 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.0 (Maipo)
[root@rhel7 ~]# service iptables stop
Redirecting to /bin/systemctl stop iptables.service
[root@rhel7 ~]# /etc/init.d/iptables stop
-bash: /etc/init.d/iptables: No such file or directory
原來在RHEL7開始,使用systemctl工具來管理服務程序,包括了service和chkconfig
systemctl list-unit-files|grep enabled
[root@rhel7 ~]# systemctl stop firewalld.service
[root@rhel7 ~]# systemctl disable firewalld.service
[root@rhel7 ~]# systemctl status firewalld.service
啓動一個服務:systemctl start firewalld.service
關閉一個服務:systemctl stop firewalld.service
重啓一個服務:systemctl restart firewalld.service
顯示一個服務的狀態:systemctl status firewalld.service
在開機時啓用一個服務:systemctl enable firewalld.service
在開機時禁用一個服務:systemctl disable firewalld.service
查看服務是否開機啓動:systemctl is-enabled firewalld.service;echo $?
查看已啓動的服務列表:systemctl list-unit-files|grep enabled
正常打包war項目時,只需標示項目打包類型便可實現web項目的war打包。可是項目不知爲什麼單獨聲明war-plugin,其指定的不一樣屬性致使打包的不一樣類型。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<warName>etopmiddle-oms-web</warName>
<!--是否將war項目打成jar包,若是設置爲TRUE則將web項目打成jar,war中包含配置文件和lib, 設置爲false,則是常規war--> <archiveClasses>false</archiveClasses>
<webResources>
<resource>
<!-- this is relative to the pom.xml directory --> <directory>src/main/resources</directory>
<targetPath>WEB-INF/classes</targetPath>
<!-- the list has a default value of ** --> <includes>
<include>**</include>
</includes>
<filtering>true</filtering>
</resource>
</webResources>
</configuration>
</plugin>
以上即爲項目中的war-plugin的聲明。其意圖很明顯,是將war中的class文件打包成jar,而後在class的jar做爲lib引用,war中只包含配置文件。可是這樣打包,會引發配置文件的亂碼。避免亂碼的最好方式就是不使用非英文。註釋掉該配置,項目打包恢復正常。