概述
有时候,由于项目的需要,我们会将源码编译后以工具包(即将class打成jar包)的形式对外提供,此时,你的 jar 包不一定要是可执行的,只要能通过编译,能被别的项目以 import 的方式调用就行了。
但还有的情况是,我们的 jar 包是要可执行的,即能直接在 cmd 下直接通过java -jar的命令运行。
前者的打包很简单,在 eclipse 中,直接选中要打包的 java 文件和其它资源、依赖文件, export → Java → JAR file 即可。需要注意的是,这种方式导出的 jar 包是不可执行的,比如你执行如下的语句:
java -jar test.jar
java -classpath test.jar com.test_maven.App
会直接报错:无法找到主类或者找不到 xxx 依赖包/类,这是由于你没有定义 MANIFEST.MF 资源描述文件所致。另一个原因可能是你直接把依赖的 jar 包打进了你最终的 jar,而这种嵌套的依赖 jar 包是不能直接被程序 import 识别的。
如何构建可执行Jar包
方法1、最简单的还是依赖于 eclipse 的导出功能:
export → java → Runnable JAR file,这种形式的导出可以通过 lanuch configuration 指定一个 MainClass,并会自动生成 MANIFEST.MF ,而且会帮你把依赖的 jar 包解压出来,一并打进最终的 jar 包,这样就能被你的代码 import 引用了。
方法2、利用Eclipse的Fat Jar
上述方法是 eclipse 自带的,此外eclipse 也有个专门的插件叫做 Fat Jar,支持许多定制化的功能,但是这个插件有些缺陷,比如修改源码后如果你不 clean & rebuild project, 它会使用缓存重新打包,这样你的编译代码还是老的,会造成执行错误,而且这样是十分不方便的。用Fat Jar Eclipse Plug-In打包可执行jar文件
方法3、利用Maven的插件
3.1: 基于Maven构建的项目最好的方式:
将项目所支持的所有类库打在一个包中,而不是只将项目编译打包到一个jar中。这样便可以直接拷贝一个jar去执行了。
<plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <appendAssemblyId>false</appendAssemblyId> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.ebay.montage.eventprocessor.collector.CodeRollOutEventDataCollector</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>assembly</goal> </goals> </execution> </executions> </plugin>
使用命令:
mvn assembly:assembly -DskipTests
这里就会在target目录下生成 {project}.jar文件,
直接运行jar文件: Java -jar {project}.jar
备注:当然也可以使用mvn clean install -DskipTests 来构建生成jar包。
需要注意的是,这种方式在新版本的Maven或者Spring中很多时候执行jar包会出现类似如下的exception:
Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/context]其原因是新版本的Maven中推荐使用shade来替代assembly方式,于是可以使用如下的命令来代替上面的命令以解决Spring NamespaceHandler for XML schema namespace的异常问题
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.handlers</resource> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.schemas</resource> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.chuanliu.c11.bootstrap.C11SearcherBootStrap</mainClass> </transformer> </transformers> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> </configuration> </execution> </executions> </plugin>
相关推荐
可java工程打成可执行jar包 将java工程打成可执行jar包
java生成Excel及jar包和文件下载的几种方式.rar
NULL 博文链接:https://xiayanghui.iteye.com/blog/2076814
java中生成exe文件 jar打包成可执行文件 内附使用文档
java的workbook类的jar包,用于对excel等进行操作
关于执行java命令引入外部jar包方法
开发完毕,部署的时候,将开发的class打成一个可执行jar包,会发现通过Class.forName(String classname) 或ClassLoader.getSystemClassLoader().loadClass(String classname)来动态载入存在于第三方jar包中的class会抛...
maven打jar包方法 并且java -jar *.jar可执行
Java web 项目中所需要的常用jar包 很全面 是有一天做项目时发现缺少很多jar包 寻找这些jar包几乎花了我一下午的时间 为方便后来人 故寻找下载并整理了一些jar包 希望对读者有所帮助 因为下载包时消耗了我大量积分 ...
java带包编译和jar包的生成
从javacv-platform-1.3.3-bin.zip中抽出来的:javacpp.jar、javacv.jar、javacv-platform.jar、opencv.jar、opencv-android-arm.jar、opencv-android-x86.jar、opencv-linux-armhf.jar 、opencv-linux-ppc64le.jar、...
java操纵excel的jar包
导入这个jar包后就可以使用ffmpeg的音频转码 mvn install:install-file -Dfile=E:\jave-1.0.2.jar //包的输入路径 ... //执行完成后 jar 会放入maven 仓库中 maven/repository/jave/jave/1.0.2/
java连接mysql5.5的jar包 mysql-connector-java-5.1.35-bin.jar
Java连接数据库的Jar包 Java连接数据库的Jar包 Java连接数据库的Jar包 Java连接数据库的Jar包 Java连接数据库的Jar包 Java连接数据库的Jar包 Java连接数据库的Jar包 Java连接数据库的Jar包
java连接MSSQL的jar包
java用于模拟https需要的jar包 包含commons-lang-2.6.jar、httpclient-4.3.2.jar、httpcore-4.3.jar、commons-io-2.4.jar、httpmime-4.3.1.jar、httpclient-cache-4.3.1.jar
将eclipse或者idea打包后的.jar包小工具类文件再打包成exe可执行文件。
kettle是一个纯java编写的etl工具,同时提供了相关api供java进行调用。速度是很快的10000笔/S速度。本资料提供的是java调用kettle需要的jar包
可执行JAR包及JAR命令详解 可执行JAR包及JAR命令详解 可执行JAR包及JAR命令详解