如何运行和编译jar

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何运行和编译jar相关的知识,希望对你有一定的参考价值。

开发做的一个软件,将代码打成了很多个jar包,我看了下每个jar包下面就是文件夹和代码,我想问下我在本地怎么才能把这些jar包运行起来呢
还有个问题就是,一个java文件需要编译成class文件,这些class文件只属于整个代码中的一小部分,那我要把java文件放到哪里编译才不会报错呢?
另外所有的操作都是在cmd里面敲命令执行。。还望高手指点

回答如下。就看是不是你要的状况了?亲!要记得采纳哎!
一、源文件情况
源文件位置为:D:\temp,源文件名(含包名字):com.ldq.WeatherDemo.java

前提:已安装 jdk ,并配置好环境变量。

二、过程
1、编译:
提示符进入 D:\temp 路径下,输入:javac com\ldq\WeatherDemo.java
生成类文件:WeatherDemo.class

2、打包:
提示符进入 D:\temp 路径下,输入:jar cvf WeatherDemo.jar com\ldq\WeatherDemo.class
生成档案文件:WeatherDemo.jar

3、修改 MANIFEST.MF 文件:
由于引用了外部的类,所以要添加引用类的路径,即修改MANIFEST.MF文件。保存如下内容到 D:\temp下,文件名 MANIFEST.MF

Manifest-Version: 1.0
Sealed: true
Main-Class: com.ldq.WeatherDemo
Class-Path: lib/jaxrpc.jar lib/log4j-1.2.8.jar lib/mail.jar lib/saaj.jar lib/tools.jar lib/wsdl4j-1.5.1.jar lib/activation.jar lib/axis.jar lib/axis-ant.jar lib/commons-discovery-0.2.jar lib/commons-logging-1.0.4.jar

注意在后面空两行。
提示符进入 D:\temp 路径下,输入:jar umf MANIFEST.MF WeatherDemo.jar
执行时会提示更新的内容。

4、添加包含引用类的相应文件:
在 D:\temp 路径下,新建 lib 文件夹,讲对应的 jaxrpc.jar ... 拷入其中,此时,即可双击(或在提示符下输入:java -jar WeatherDemo.jar)运行 WeatherDemo.jar 文件了。

三、总结
双击运行 jar 文件时,虚拟机会到 jar 文件中下找 .MF 文件,找到对应的 Main-Class 运行,引入的类在 Class-Path 所指路径。
事实上可以利用 winrar或winzip 工具打开 jar 文件,直接将修改好的 MANIFEST.MF 拷入覆盖,class文件也可以做同样的操作,节省了输入复杂难记的命令。另外,对于 javaME 生成的 jar 文件,限制严格些,MANIFEST.MF 文件中有个文件大小的字段,可以先保存,查看文件大小,再修改保存。
另一种方法是通过 Eclipse - Export - Runnable JAR file 直接生成 jar 文件,此时,所有的引用类都被打包在 jar 文件里了。追问

我现在编译java文件,都说找不到符号什么的。代码肯定是没错,因为别人都编译通过的。
环境变量:
JAVA_HOME:D:\java\jdk1.6.0_16
Path:%JAVA_HOME%\bin;%J2EE_HOME%;
我不用eclipse的 都是直接敲dos命令
问下到底是哪里出问题呢

参考技术A 一、源文件情况
源文件位置为:D:\temp,源文件名(含包名字):com.ldq.WeatherDemo.java

前提:已安装 jdk ,并配置好环境变量。

二、过程
1、编译:
提示符进入 D:\temp 路径下,输入:javac com\ldq\WeatherDemo.java
生成类文件:WeatherDemo.class

2、打包:
提示符进入 D:\temp 路径下,输入:jar cvf WeatherDemo.jar com\ldq\WeatherDemo.class
生成档案文件:WeatherDemo.jar

3、修改 MANIFEST.MF 文件:
由于引用了外部的类,所以要添加引用类的路径,即修改MANIFEST.MF文件。保存如下内容到 D:\temp下,文件名 MANIFEST.MF

Manifest-Version: 1.0
Sealed: true
Main-Class: com.ldq.WeatherDemo
Class-Path: lib/jaxrpc.jar lib/log4j-1.2.8.jar lib/mail.jar lib/saaj.jar lib/tools.jar lib/wsdl4j-1.5.1.jar lib/activation.jar lib/axis.jar lib/axis-ant.jar lib/commons-discovery-0.2.jar lib/commons-logging-1.0.4.jar

注意在后面空两行。
提示符进入 D:\temp 路径下,输入:jar umf MANIFEST.MF WeatherDemo.jar
执行时会提示更新的内容。

4、添加包含引用类的相应文件:
在 D:\temp 路径下,新建 lib 文件夹,讲对应的 jaxrpc.jar ... 拷入其中,此时,即可双击(或在提示符下输入:java -jar WeatherDemo.jar)运行 WeatherDemo.jar 文件了。

三、总结
双击运行 jar 文件时,虚拟机会到 jar 文件中下找 .MF 文件,找到对应的 Main-Class 运行,引入的类在 Class-Path 所指路径。
事实上可以利用 winrar或winzip 工具打开 jar 文件,直接将修改好的 MANIFEST.MF 拷入覆盖,class文件也可以做同样的操作,节省了输入复杂难记的命令。另外,对于 javaME 生成的 jar 文件,限制严格些,MANIFEST.MF 文件中有个文件大小的字段,可以先保存,查看文件大小,再修改保存。
另一种方法是通过 Eclipse - Export - Runnable JAR file 直接生成 jar 文件,此时,所有的引用类都被打包在 jar 文件里了。

如何在没有编译/检查的情况下运行“sbt run”?

VPS内存不足,无法在不崩溃的情况下运行编译。我无法生成工作胖jar(用sbt-assembly,sbt-native-packager和sbt-start-script尝试了很多东西但没有成功)。

我不是在问如何制作一个胖罐。

题: 如何准备(我想只是在其他机器上编译)以及如何“sbt运行”而不触发依赖性检查和编译?

答案

是否有可能在服务器之外构建JAR并将JAR推过去?如果这是您的某种生产服务器,则不希望在服务器上包含编译器相关库。

可以试试:

offline := true

也许,

cleanKeepFiles ++= Seq("resolution-cache", "streams").map(target.value / _)

哪个应该避免做分辨率检查!

以上是关于如何运行和编译jar的主要内容,如果未能解决你的问题,请参考以下文章

如何解决Android 6.0中无法编译出jar

windows下用命令行编译并运行java工程,怎样编译引用的多个jar包和配置文件.xml呢?

java命令行编译和运行引用jar包的文件

java代码如何生成可运行的程序 例如c一样,编译后有exe java是否一定要jdk??

javac如何编译.java,.jar

在linux下怎么编译和运行java程序