maven使用過程當中遇到過的一些問題,或者疑問.

1.在Myeclipse中新建maven項目的時候沒法選擇Archetype(列表爲空,卡死,或者拋出異常)

    描述:Myeclipse新建maven項目,Select an Archetype列表爲空
    緣由:缺乏archetype文件
    解決思路:經過mvn命令來建立項目骨架,這時maven會自動去更新而且下載archetype文件.html

mvn archetype:generate
// 首先它會去下載依賴的jar文件,
// 而後出現Generating project in interactive mode.(會等待較長時間,跟網速有關.)
// 接在它會下載最新的http://repo1.maven.org/maven2/archetype-catalog.xml
// 最後出現Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 909:
// 這是提示你建立新項目骨架,這是能夠直接退出命令行,重啓myeclipse建立新項目了.

    參考: http://blog.csdn.net/kingzone_2008/article/details/39621849
              http://tieba.baidu.com/p/2804486258
              http://www.cnblogs.com/yjmyzz/p/3495762.htmlapache

2.Myeclipse Maven報錯 An internal error occurred during: "Retrieving archetypes:". GC overhead limit exceeded

     JVM內存過小了,從新設置一下Myeclipse的JVM內存,參考http://unixboy.iteye.com/blog/174173/app

3.dependencies與dependencyManagement之間的關係

    dependencyManagement是聲明本項目中可能會使用什麼依賴,(能夠用於版本統一管理)
    dependencies是定義項目中使用什麼依賴
    當一個依賴出如今dependencyManagement中時dependencies中的定義就不須要版本號了eclipse

<!-- 聲明項目用哪一個版本的junit  -->
<!-- 一般這個是放在 parent項目中的 -->
<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
		</dependency>
	</dependencies>
</dependencyManagement>
<!-- 定義項目使用哪一個版本的junit -->
<!-- 一般這些是定義在 子項目中的 -->
<dependencies>
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<scope>test</scope>
		<!-- 建議不要設置version值, 它會默認找management中的version -->
		<!-- 若是項目有特殊差別,能夠在此定義當前項目中須要的版本 -->
		<!-- <version>3.8</version> -->
	</dependency>
</dependencies>

    注意:只有依賴被定義時maven纔會將依賴添加到項目中maven

4.定義的profiles/profile屬性不生效,沒有被編譯到resource中

    須要爲resource設置filtering爲true,這樣纔會將profile屬性編譯到resouce文件中工具

<!-- 若是你使用了pros,就須要顯式定義resource,而且設置filtering -->
<resources>
	<!-- resource 的具體狀況請根據項目的路徑來設定,這裏只是參考 -->
	<resource>
        <!-- 主要是這個屬性 -->
		<filtering>true</filtering>
		<directory>src/main/resources</directory>
        <!-- 若是不聲明includes就表示目錄下全部文件 -->
		<includes>
			<include>**/*</include>
		</includes>
	</resource>
</resources>

5.打包以後部分配置文件中,部分字符亂碼.

    5.1.肯定文件格式是utf-8
    5.2.肯定配置文件顯式聲明爲utf-8
    5.3.pom設置project.build.sourceEncoding,以及設置maven-compiler-plugin的編碼方式測試

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
.....
.....
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-compiler-plugin</artifactId>
	<configuration>
		<source>1.7</source>
		<target>1.7</target>
		<!--主要是這一句 -->
		<encoding>UTF-8</encoding>
	</configuration>
</plugin>

    這個問題參考地址:http://blog.csdn.net/chinazgr/article/details/48176089ui

6.經過maven設置不一樣環境的參數,

    思路,經過xml定義好不一樣環境的配置參數,經過命令-P或者activeByDefault的參數來定義用哪套來打包.
    6.1定義全部環境的配置參數編碼

<!-- 能夠經過mvn -P [ID 好比:mvn -PDEV install] 來使用 -->
<profiles>
	<!-- 開發環境配置參數 -->
	<profile>
		<id>DEV</id>
		<!-- 默認使用它來打包 -->
		<activation><activeByDefault>true</activeByDefault></activation>
		<properties>
			<!-- 參數配置, 標籤是你本身定義的 -->
			<mvncfg.log.path><![CDATA[F:/logs]]></mvncfg.log.path>
		</properties>
	</profile>
	<!-- 測試環境配置參數 -->
	<profile>
		<id>TEST</id>
		<!-- 若是想要打包測試環境,將上面的activation註釋掉,而且copy到這裏 -->
		<properties>
			<!-- 日誌輸出路徑 -->
			<mvncfg.log.path><![CDATA[F:/test/logs]]></mvncfg.log.path>
		</properties>
	</profile>
</profiles>

    6.2告訴maven哪些文件須要使用這些參數來替換佔位符,或者哪些文件不須要替換佔位符spa

<!-- 全部你須要先定義哪些是資源文件 -->
<resources>
	<resource>
		<!-- 這個是最關鍵的 -->
		<filtering>true</filtering>
		<directory>src/main/resources</directory>
		<includes>
			<include>**/*</include>
		</includes>
		<!-- 這個是爲了排除部分不須要替換佔位符,或者已有的佔位符與maven佔位符衝突的文件 -->
		<!-- 一般建議你避開一下maven自己自帶的佔位符,好比${id},這樣就不須要定義排除了 -->
		<excludes>
			<exclude>config/execlude.xml</exclude>
		</excludes>
	</resource>
	<!-- execlude.xml原本是資源文件,只是不須要使用替換佔位符而已 -->
	<!-- 因此這裏還須要將execlude.xml聲明爲資源文件 -->
	<resource>
		<!-- 這個參數告訴maven不須要幫我替換佔位符 -->
		<filtering>false</filtering>
		<directory>src/main/resources</directory>
		<includes>
			<include>config/execlude.xml</include>
		</includes>
	</resource>
</resources>

    6.3.使用佔位符,(假設文件位置src/main/resources/properties/log4j.properties)

....
#若是打包開發者環境,他就是D:/logs/logfile.log 
#若是打包測試環境,他就是D:/logs/test/logfile.log 
log4j.appender.File.File =${mvncfg.log.path}/logfile.log  
....

    搜索備註:maven如何將配置信息打到某些包下,maven如何排除配置文件,maven的includes與excludes

7. maven中如何引用本地Jar包

    7.1 方法有兩種,1本身搭建私服,2.直接使用systemPath來指定(這就是我想說的)

<!-- 本地jar包 二維碼相關工具 -->
		<dependency>
			<groupId>jp.sourceforge.qrcode</groupId>
			<artifactId>QRCode</artifactId>
			<version>1.0</version>
			<scope>system</scope>
            <!-- 在這裏指定jar的路徑就能夠了,可是一般建議使用變量來配置,畢竟每一個人的路徑不必定相同 -->
			<systemPath>${localJarPath}/QRCode.jar</systemPath>
		</dependency>

 

但願能幫你解決問題
本文出處:https://my.oschina.net/longfong/blog/813146

相關文章
相關標籤/搜索