結論:不要使用export導出maven的工程,而是使用assemable plugin。
1 一個標准的java工程導成runnable jar
1.1 首先需要在工程里對應的入口類,執行一次main方法,從而讓eclispe記錄lanuncher。否則在導出jar的時候,找不到launch。下面是main執行完后,在相應的Java Application里面配置launch的名稱等。
1.2 選擇export | runnable JAR file | 選中工程對應的launch, 導出jar,依賴的jar導出策略(通常選2)
1.3,導出的工程結構最簡單的是將配置文件放到src目錄下,這樣導出后就直接位於classpath。如果放在了不在/src的其它目錄下,需要在將該目錄添加為src目錄,這樣編譯之后,里面的文件才能位於classpath.
2.maven導出runnable jar
2.1 maven錯誤的通過export導出runnable jar.
如果maven工程也使用export jar,導出后會發現main/resources/*.*都不會位於classpath下。這與標准的java工程在指定源目錄之后,編譯的內容會位於classpath不同。所以直接使用maven的插件assemble在compile之后,導出jar。
驗證1.
驗證2: export確實可以把maven依賴的dependency導出。Libraries里面顯示指定依賴的jar。
驗證3:導出的jar的結構。可以看到應用程序讀取的配置文件都位於了classpath:resouces/file而不是classpath:file。
2.2 maven正確的導出runnable jar
2.2.1在pom.xml里面添加如下配置
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.daodao.tool.migrate.App</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
2.2.2 新建一個goal:clean compile assembly:single, 注意,如果命令行執行,需要前面加mvn。
2.2.3. 將會嚴格的按照pom.xml里面的依賴打成jar。包括exlude的jar也會剔除。
附:m2eclipse中如何判斷jar沖突並排除。
右側的Resolved Dependency就是分析依賴后的最終依賴的jar。發現spring-beans,spring-core使用的是spring2.0.6的版本。與spring2.5.6沖突。(myeclipse的工具可以圖形化這些沖突並標記,更加方便。)
此時可以右健這二個jar選中Exclude Maven Artificat .....即可修改相應的pom.xml。