结论:不要使用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。