欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java命令打包java工程,

来源: javaer 分享于  点击 33451 次 点评:15

java命令打包java工程,


自动打包java工程

介绍

自动打包java工程,主要功能是什么呢?没错,如标题所言,就是通过命令实现自动打包普通java工程,将java工程打包成一个jar包。

前言

肯定很多人会疑惑,为什么不用IDE直接导出jar呢?还要编写命令?不是多此一举?
答案是:
特殊情况需要,如果需要在服务器中,实现自动生成jar包,而不是在IDE的情况下,就需要该工具实现导出jar包。当然,本地也是可以使用的。
如果,刚好你也有这种需求,需要通过java命令导出jar包的话,可以看下这篇博客。因为,我就是刚好碰到。
因为,我找不到完整的命令,所以,想把这次的调研和开发脚本过程记录下来~
当然,该工具还需要更加完善,如有建议,欢迎留言~

思路

需要解决的问题

方案如下

–>如何编译所有java文件?

两种情况
一、如果要导出的jar包是有执行主类的,先是查找项目配置文件 MANIFEST.MF 读取出执行的Main类,然后编译Main类,因为Main类在编译的过程中,会通过需要用到的类去寻找编译,这样的话,就可以链式的编译整个项目有需要用到的java文件。
二、导出来的jar包不可以直接执行的,只能作为lib使用的,也就是没有配置文件,那就是通过找出所有包名,然后编译所有包名下的java文件,当然,javac可以一次性编译一个文件夹下的所有java文件。

–>使用javac编译java文件的过程中,如何让编译的java文件能正确地找到对应依赖的lib和其他包名下的java文件?

javac命令中,有一个可选项,-cp(-classpath) 后面带的就是编译时需要用到的依赖jar 和对应的其他依赖库,还有所有包名,但是为了编译的时候能找到对应的包名,必须cd到对应的src目录
例如:

javac -classpath .;../libs/dom4j-2.1.0.jar;compiler;main;utils;vo -encoding utf-8 -d ../classesOutput -Xlint:unchecked -Xlint:deprecation builder/*.java
–>如何在压缩class成jar的时候,将其他jar包也压缩到目标jar中呢?

将用到的jar包复制到编译出的class文件夹中,然后使用jar命令压缩即可

javac命令

javac -classpath .;../libs/dom4j-2.1.0.jar;compiler;main;utils;vo -encoding utf-8 -d ../classesOutput -Xlint:unchecked -Xlint:deprecation builder/*.java
说明:
-classpath 后面带的是编译过程中所需要用到的类,可以为jar包、类保存的文件夹、zip文件等
-encoding 指定编译时的java文件编码格式为utf-8格式
-d 后面带输出的class的路径
-Xlint:unchecked -Xlint:deprecation 避免编译不通过
builder/*.java 编译当前目录下的builder包中的所有Java文件

注意:
1、Windows下和Linux下的命令还有所差异,Windows下,-cp(-classpath)后面接的库需要用’;‘隔开,Linux下的得用’:'隔开
2、在Linux下,使用Java.Runtime.exec命令执行的时候,需要注意,部分命令执行无法达到效果,也就是没执行起来,具体的调用,在Linux下,需要加上两个操作符。
String[] cmds = {“sh”, “-c”, cmd};
process = Runtime.getRuntime().exec(cmds, null, runDir);

3、文件的编码格式最好是utf-8,不然编译会出问题
4、jar包和输出路径可以使用绝对路径,但是包名的应用不能使用绝对路径,不然会找不到对应的包名
5、执行该命令的时候,一定要cd到src目录中,不然包名会找不到!
6、最好添加这两个可选项 -Xlint:unchecked -Xlint:deprecation 不然,当接口废弃或者unchecked的时候,会提示哪些方法是unchecked和deprecation的!

jar命令

jar cvfm C:/Users/37/Desktop/test/test.jar C:/Users/37/Desktop/test/bin/META-INF/MANIFEST.MF -C C:/Users/37/Desktop/test/bin/ .
说明:
jar cvfm 输出的jar包的路径 配置文件的路径 -C 编译的好的class文件夹路径 .
注意:bin/ 表示class的父级文件夹;最后记得要空格加一个"."

写在最后

具体的工具代码实现,最主要的命令就是上面这两个,如果遇到什么问题,欢迎留言~

项目的GitHub地址:ExportJarCommand

相关文章

    暂无相关文章
相关栏目:

用户点评