(1)最简单的还是依赖于 eclipse 的导出功能:
export → java → Runnable JAR file,这种形式的导出
可以通过 lanuch configuration 指定一个 MainClass,并会自动生成 MANIFEST.MF ,而且会帮你把依赖的 jar 包解压出来,一并打进最终的 jar 包,这样就能被你的代码 import 引用了。
(2)上述方法是 eclipse 自带的,eclipse 也有个专门的插件叫做 Fat Jar,支持许多定制化的功能,具体请参见下面的链接。但是这个插件有些缺陷,比如修改源码后如果你不 clean & rebuild project,
它会使用缓存重新打包,这样你的编译代码还是老的,会造成执行错误,而且这样是十分不方便的。
用Fat Jar Eclipse Plug-In打包可执行jar文件
http://8366.iteye.com/blog/480652
(3)稍微大点的项目都会用 maven 或者 ant 来构建,在 maven 工程中,我们也可以很方便的打包成可执行的 jar<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>1.4</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.juvenxu.mavenbook.HelloWorldCli</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin>上述例子中的,我的Main-Class是com.juvenxu.mavenbook.HelloWorldCli,构建完成后,对应于一个常规的
每个项的具体打包路径用户也能自由控制。比如下面的配置通过设置 assembly 文件的配置节点 dependencySets/includes,来实现 maven build 生成的 jar 包只包含指定的 jar 依赖。
<assembly ... ooxx> <fileSets> </fileSets> <dependencySets> <dependencySet> <unpack>false</unpack> <outputDirectory>lib</outputDirectory> <scope>runtime</scope> <includes> <include>groupId:artifactId</include> </includes> </dependencySet> </dependencySets> </assembly>具体请参见:
http://www.infoq.com/cn/news/2011/06/xxb-maven-9-package
maven发布 jar类型的工程
http://mengyunshuitian.iteye.com/blog/1759864
maven assembly plugin dependencySet with transitive dependencies
http://stackoverflow.com/questions/22505886/maven-assembly-plugin-dependencyset-with-transitive-dependencies
http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html#dependencySet
(4)可以使用两个 Maven 插件帮助您完成:maven-jar-plugin 和 maven-dependency-plugin。<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>com.mypackage.MyClass</mainClass> </manifest> </archive> </configuration> </plugin>所有 Maven 插件通过一个 <configuration> 元素公布了其配置,在本例中,maven-jar-plugin 修改它的 archive 属性,
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy</id> <phase>install</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory> ${project.build.directory}/lib </outputDirectory> </configuration> </execution> </executions> </plugin>maven-dependency-plugin 有一个 copy-dependencies,目标是将您的依赖项复制到您所选择的目录。本例中,我将依赖项复制到
关于 Apache Maven 您不知道的 5 件事
http://www.ibm.com/developerworks/cn/java/j-5things13/
(5)当然了,如果你不怕麻烦的话,手动打包,自己建立、维护 MANIFEST.MF 文件也是可以的,你可以参考如下链接:http://blog.csdn.net/mango_song/article/details/8531389
http://gushuizerotoone.iteye.com/blog/1757002
(6)把包发布到 nexus
项目上右键 → run as → maven build
附:Maven的坐标GAV(groupId, artifactId, version)定义
pom定义了最小的maven元素,允许groupId,artifactId,version。在 POM 中,groupId, artifactId, packaging, version 叫作 maven 坐标,它能唯一的确定一个项目。有了 maven 坐标,我们就可以用它来指定我们的项目所依赖的其他项目,插件,或者父项目。一般 maven 坐标写成如下的格式:
groupId:artifactId:packaging:version
<dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.2.2</version> <classifier>jdk15</classifier> </dependency>这样配置即可找到json-lib-2.2.2-jdk15.jar ,其他的就不解释了,应该明白他的用途了吧。
主要为依赖,继承,合成
REF:
使用maven插件对java工程进行打包
http://chenzhou123520.iteye.com/blog/1706242
关于如何从jar包中读取配置、属性文件,请参考:
http://my.oschina.net/leejun2005/blog/95186
Apache Maven 入门篇(下)
http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-2-405568-zhs.html
maven 配置篇 之pom.xml(一)
http://zyl.iteye.com/blog/41754
Maven最佳实践:划分模块
http://juvenshun.iteye.com/blog/305865
在Eclipse中创建Maven多模块工程的例子
http://www.blogways.net/blog/2013/05/13/maven-multi-modules-demo.html