zoukankan      html  css  js  c++  java
  • dos命令行中运行包含java命令的bat脚本

    dos命令行中运行包含java命令的bat脚本:

    @echo off
    rem echo current absolute path:%~dp0
    rem echo current working directory1:%cd%
    rem echo JAVA_HOME: %JAVA_HOME%
    rem cd /d F:StudysourceCode
    rem echo current working directory2:%cd%
    rem echo classpath:%classpath%
    java -classpath F:StudysourceCode WakeOnLan wan lenovo
    rem @pause
    

    扩展:
    在cmd命令行中,用javac编译java文件可以成功,但是用java执行却提示“找不到或无法加载主类”。现将该问题的原因以及解决办法记录一下。

    先理解一下系统变量path和classpath的作用。

    1. path:可执行命令的搜索路径,在该路径下搜索可以运行的程序或批处理文件。
        命令行中输入一个命令,则会在path配置的目录中查找该命令,如果存在则调用该程序运行,如果不存在则提示“ 'XXX' 不是内部或外部命令,也不是可运行的程序或批处理文件。”
        如果要想在cmd中执行java,则需要把java.exe 配置在path系统变量中。由于cmd会搜索path中目录下的文件,因此在实际配置的时候,只需要把../jre/bin 配置到path中即可。这样,在执行java时,操作系统便会自动在../jre/bin 目录下搜索java.exe 可执行程序了。

    2. classpath: 类文件(.class/.jar)的存储路径。
        java 命令执行时,会读取classpath中配置的目录,然后在该目录下去搜索将要执行的.class文件。如果未搜索到,则会报“找不到或无法加载主类”错误,如果搜索到,则继续运行。
        例如:执行命令 java Hello;
          则java程序会去在classpath配置的所有目录和文件中取搜索Hello.class文件,找到之后会把该class文件加载到jvm中,为后面的运行做准备。
        classpath这个系统变量只是为java使用的,其他程序不会使用该变量。

    如上所说,java执行时,会在classpath中搜索 XXX.class 文件,如果找不到则报出"找不到或无法加载主类"的错误。那么在cmd运行的时候,我们会随意的在某个目录下面javac编译,然后java运行程序,那么,该目录未配置到classpath中,java程序又是如何找到该目录的呢?

    还记得配置classpath的时候,有一个".;"的配置项吗?其代表的就是执行java命令是的所在目录,也即是当前目录。这样即是把当前目录加入了classpath,因此java执行的时候,会在当前目录中搜索XXX.class 的。

    注意,当配置 .; 的时候,一定要注意前面是不是还有其他配置。classpath中多个目录要以;分割,而这里的"."是一个配置项,代表的当前目录,所以,如果"."前面有其他的配置项,则前面同样需要加入";"。
      例如:
        "."前面有其他配置项,则这样配: ...in;.;%JAVA_HOME%in.......
        "."前面无其他配置项(也即是classpath是以.开始的),则这样配: .;%JAVA_HOME%in.......
      注意,在配置的时候一定要确定到底是";.;"还是".;", 否则如果配成...in.;%JAVA_HOME%in.......则就会发生:能够javac编译成功,但是java却无法执行成功的错误。

    另:用户变量会覆盖掉系统变量
      环境变量不区分大小写

    参考链接:https://www.cnblogs.com/PerkinsZhu/p/9766400.html

  • 相关阅读:
    Vue使用watch监听一个对象中的属性
    小程序 显示对话框 确定-取消
    【微信小程序】 wx:if 与 hidden(隐藏元素)区别
    vue项目移植tinymce踩坑
    XMLHttpRequest.withCredentials 解决跨域请求头无Cookie的问题
    appJSON["window"]["navigationBarTextStyle"] 字段需为 black 或 white
    Java写 插入 选择 冒泡 快排
    编码表理解
    Centos yum安装java jdk1.8
    Java Hibernate和.Net EntityFramework 如何在提交事务之前 就拿到需要新增实体的Id
  • 原文地址:https://www.cnblogs.com/mediocreWorld/p/15188761.html
Copyright © 2011-2022 走看看