Java基础打包以及批处理命令运行

1.前期准备

Demo1.java

package packageJava.test;

public class Demo1 {

    public static void main(String[] args) {
        System.out.println("Test!!!!!!!!!!!!!");
    }
}

 

 2.将上述java文件考到文件夹下面

 

3.命令行编译及运行文件

编译java文件的时候:

javac  -d . xxx.java

 

 

结果:

 

运行文件:(这时候要加上包名)

 

 

如果以UTF-8编译文件:

javac -encoding utf-8 MyDay.java

 

如果想在编译的时候直接生产package目录,可以采用如下命令: (注意有个点)

C:\Users\Administrator\Desktop\新建文件夹 (2)> javac -d . test.java
C:\Users\Administrator\Desktop\新建文件夹 (2)> java test.test
test

 

结果会自动生成package目录结构,并且将test.class生成到对应的文件夹下面。

 

4.打包文件

0.查看jar命令的参数

C:\Users\liqiang\Desktop>jar
用法: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] file
s ...
选项包括:
    -c  创建新的归档文件
    -t  列出归档目录
    -x  从档案中提取指定的 (或所有) 文件
    -u  更新现有的归档文件
    -v  在标准输出中生成详细输出
    -f  指定归档文件名
    -m  包含指定清单文件中的清单信息
    -e  为捆绑到可执行 jar 文件的独立应用程序
        指定应用程序入口点
    -0  仅存储; 不使用情况任何 ZIP 压缩
    -M  不创建条目的清单文件
    -i  为指定的 jar 文件生成索引信息
    -C  更改为指定的目录并包含其中的文件
如果有任何目录文件, 则对其进行递归处理。
清单文件名, 归档文件名和入口点名称的指定顺序
与 'm', 'f''e' 标记的指定顺序相同。

示例 1: 将两个类文件归档到一个名为 classes.jar 的归档文件中:
       jar cvf classes.jar Foo.class Bar.class
示例 2: 使用现有的清单文件 'mymanifest' 并
           将 foo/ 目录中的所有文件归档到 'classes.jar' 中:
       jar cvfm classes.jar mymanifest -C foo/ .

 

1.打包普通的jar包

 命令:     jar cvf test.jar packageJava

 

结果:

 

 

 

进入jar文件修改配置:(Main-Class:后面有空格)

 

 

 

补充:打指定目录的包的命令如下,例如classes目录下也有一些xml,如果直接打包的话会将xml也打进去,下面不会进去:

Administrator@MicroWin10-1535 MINGW64 /e/xiangmu/zdconpro/build/classes
$ pwd
/e/xiangmu/zdconpro/build/classes

Administrator@MicroWin10-1535 MINGW64 /e/xiangmu/zdconpro/build/classes
$ ls
ebuy.properties  zd/

Administrator@MicroWin10-1535 MINGW64 /e/xiangmu/zdconpro/build/classes
$ jar cvf commons-sync-jetty.jar ./zd/

会将zd目录以及子目录打进去,结构如下:

 

 

 

2.打包war包与解压war包:(重要)

1.打包:  进入到项目外层目录,例如当前目录的jwxt是一个完整的web项目,打包命令如下:

$ ls  
jwxt/  jwxt.war  Spring_Struts_Mytatis/  SpringBootJwxt/  SSM/  TTT/

liqiang@root MINGW64 /e/IDEAWorkSpace
$ jar cvfM0 jwxt.war ./jwxt/

 

2.解压包

jar -xvf ./jwxt.war

 

 

 

5.编写批处理文件运行jar包

 

运行效果;

 

6.将编译后的文件添加到压缩文件运行

运行方式一:(set classpath对于本次窗口有效,设置classpath)

 

运行方式二:

清空classpath

运行:(java -classpath; test.zip xx.xx.xxx 仅对于本次命令有效)

 

 

总结:

运行方式:(也就是发布项目的两种方式)

1. 打包成jar后用批处理文件运行jar包

打包命令:  jar cvf test.jar packageName 

解释:将编译后的packageName文件夹打包成test.jar

注意:打包完成后要进入jar包修改主类入口

 

bat运行命令:java -jar test.jar

 

2.将编译后的文件夹放入zip文件夹,通过设置classpath运行zip中的class文件。

bat命令:

第一种:set classpath=test.zip

    java package.mainJava

 

第二种:  java -classpath .\test.zip; package.mainJava

   解释:加分号表示在test.zip找不到也回到当前文件夹下面找。

 

批处理文件进去的默认工作目录就是所在空间

 

 

常用批处理命令:

 

 

 

附上自己的练习的命令:

@Echo off
rem call start-server
start E:\酷狗\KGMusic\KuGou.exe
start E:\Eclipse\eclipse\eclipse.exe
start E:\hbuilder1\HBuilder\HBuilder.exe
rem 打开桌面上的eclipse,HBuilder,酷狗音乐。


E:
cd php\Test\第一个html
start 界面.html
rem 进入E盘打开自己设计的网页


cd E:\program files (x86)\Bin
start QQ.exe
rem 进入E盘打开自己腾讯QQ
rem start E:\搜狗浏览器\SogouExplorer\SogouExplorer.exe
rem start E:\fire\firefox.exe
rem 这是注释,echo off是以后的命令均不显示,pause是暂停,等待用户按键后继续。用echo是在dos界面显示字符
rem  cd desktop    


if exist 1.bat start 酷狗音乐
rem 这是注释,echo off是以后的命令均不显示,pause是暂停,等待用户按键后继续。用echo是在dos界面显示字符。上面是若果存在1.bat就打开酷狗音乐
goto next
:next
echo 不存在名为1.bat的文件
rem 调到goto指定的标号命令    :next表示标号


rem for %%c in (*.bat *.txt) do type %%c  
rem 读取索要.bat文件

set var=我是变量
echo %var%
rem set设置变量,取变量时变量名前后都要加%


set var1=1122
set var1=%var1:11=22%
echo %var1%
rem 将变量var1中的11替换为22

set var2=123456789
echo %var2:~0,5%
rem 这是从变量的从第一位开始,显示之后的五位(%var:~1,5的用法)

set var=123456789
echo %var:~-5%
rem 这是从变量的最后五位显示出来

set var3=123456789
set var3=%var:~3%
echo %var1%
rem 这是从变量的第四位开始的显示出来

set var4=123456789
echo %var4:~,3% 
rem 这是从变量的从第0位开始,显示之后的3位



rem set /p var=请输入变量的值:
rem echo  %var% 
rem 请输入变量是提示符,输入的字符为var变量的值

set var5=123456789
set/a var6=%var5%*2
echo %var1% 
rem  /a是变量可以进行运算,变量var6=变量var5*2

set "CURRENT_DIR=%cd%"  
rem 将当前驱动器目录赋值给变量CURRENT_DIR,%cd%是当前目录的值



@ECHO  OFF  
ECHO.  

ECHO  The  first  parameter  is  %1
ECHO  The  second  parameter  is  %2
ECHO  The  third  parameter  is  %3  
rem 参数的使用,文件名是1.bat,在cmd中输入1 2 3 4;%1就是取文件名后第一个字符,也就是2,依次类推%2是取文件名后第二个字符。

 

补充:打包带有主类而且有依赖第三方jar包的类: (自定义清单打包)

目录结构如下:

1.用Eclipse打包的时候选择Main-Class,打出的包结构解压后如下:

2.查看META-INF\MANIFEST.MF清单文件:

Manifest-Version: 1.0
Main-Class: cn.qlq.LogTest

 

.classpath文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="lib" path="lib/log4j-1.2.16.jar"/>
    <classpathentry kind="lib" path="lib/slf4j-log4j12-1.5.10.jar"/>
    <classpathentry kind="lib" path="lib/slf4j-api-1.5.10.jar"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
        <attributes>
            <attribute name="owner.project.facets" value="java"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="output" path="bin"/>
</classpath>

 

3.现在我们手动编写清单文件还原jar包:

   清单文件必须以空行结束,而且值是key: value形式,冒号后面必须有一个空格。

其包含的主要属性如下:

(1)版本:一般是定值

Manifest-Version: 1.0

(2)主类

Main-Class: cn.qlq.Main

  这个是以java -jar xxx.jar的时候会运行cn.qlq.Main类的main方法。

(3)  类路径

您可以在其清单文件中为JAR文件设置CLASSPATH。属性名称称为“类路径”,您必须在自定义清单文件中指定。它是一个空格分隔的jar文件,zip文件和目录的列表。清单文件中的Class-Path属性看起来像

Class-Path: Main.jar  file:/c:/book/  //www.w3cschool.cn/tutorial.jar

  上面的条目有三个CLASSPATH项目:一个JAR文件Main.jar,一个使用文件协议文件的目录:/ c:/ book /和另一个使用HTTP协议的JAR文件//www.w3cschool.cn/tutorial.jar。

  目录名称必须以正斜杠结尾。假设此类路径设置包含在test.jar文件的清单文件中。当使用以下java -jar xxx.jar   文件时,此CLASSPATH将用于搜索和加载类。

 

4. 针对上面文件建立的清单文件如下: 最后有一个空行

Manifest-Version: 1.0
Class-Path: lib/log4j-1.2.16.jar 
 lib/slf4j-api-1.5.10.jar 
 lib/slf4j-log4j12-1.5.10.jar 
Main-Class: cn.qlq.LogTest

设置Class-Path的注意:

  1. 每一个包名前有一个空格
  2. 换行时,上一行的末尾要有一个空格

 可以用如下代码生成:

     File file = new File("lib");  
        for (File f : file.listFiles()) {  
            System.out.println(" " +"lib/"+ f.getName() + " ");  
        }

 

5. 打包以及测试:

最终目录如下:

打包:

jar cvfm ./xxx.jar .\MANIFEST.MF ./

 运行:

C:\Users\Administrator\Desktop\新建文件夹 (3)> java -jar .\xxx.jar
log4j:ERROR Could not find value for key log4j.appender.file
log4j:ERROR Could not instantiate appender named "file".
2019-04-19 12:04:34 [cn.qlq.LogTest]-[INFO]  test -> 12

 

posted @ 2017-08-05 10:24  QiaoZhi  阅读(1293)  评论(0编辑  收藏  举报