java -cp  和 javac -cp

https://www.cnblogs.com/webcyz/p/6551655.html

jvm搜索类定义过程:
1:系统会现在当前包下找。
2:会在rt.jar 文件下找
3;会在classpath所指向的路径下找。

-cp 即 -classpath 指定classpath

windows系统下多个jar用分号":"分隔

编译

javac -cp 绝对路径1.jar;绝对路径2.jar java文件名.java

运行

java -cp .;绝对路径1.jar;绝对路径2.jar 全限定类名(此类有main方法)

linux系统下多个jar用冒号":"分隔

编译

javac -cp 绝对路径1.jar:绝对路径2.jar java文件名.java

运行

java -cp .:绝对路径1.jar:绝对路径2.jar 全限定类名 (此类有main方法)

注意:多个jar包必须拼接classpath,不能使用统配符号。

java -jar

java命令执行jar包的方式

一个java应用项目可以打包成一个jar,指定一个拥有main函数的main class作为你这个jar包的程序入口。就可以用 jar -jar jar的名称.jar运行了。

指定入口的方法是修改jar包内目录META-INF下的MANIFEST.MF文件
比如有个叫做test.jar的jar包,里面有一个拥有main函数的main class:test.someClassName
我们就只要在MANIFEST.MF里面添加如下一句话:
Main-Class: test.someClassName
然后我们可以在控制台里输入java -jar test.jar即可以运行这个jar。

但是我们这个项目需要引用其他第三方的jar包,在eclipse里面以项目jar包的形式引用了这个叫做some.jar的包,当时放在项目的lib子目录下,最后项目打包时把这个some.jar也打进来了,但是用java -jar执行这个test.jar的时候报找不到Class异常,原因就是jar引用不到放在自己内部的jar包。
那怎么办?
运行时将其加入classpath的方式行不行?就是在运行jar的同时加入classpath参数:
java -classpath some.jar -jar test.jar

这种方式是不行的,因为使用classpath指定的jar是由AppClassloader来加载,java 命令 加了-jar 参数以后,AppClassloader就只关注test.jar范围内的class了,classpath参数失效。
那该怎么引用其他的jar包呢?

方法一、使用Bootstrap Classloader来加载这些类

在运行时使用如下参数:

-Xbootclasspath:完全取代系统Java classpath.最好不用。
-Xbootclasspath/a: 在系统class加载后加载。一般用这个。
-Xbootclasspath/p: 在系统class加载前加载,注意使用,和系统类冲突就不好了.

win32 java -Xbootclasspath/a: some.jar;some2.jar; -jar test.jar
unix java -Xbootclasspath/a: some.jar:some2.jar: -jar test.jar
win32系统每个jar用分号隔开,unix系统下用冒号隔开

方法二、使用Extension Classloader来加载
把需要加载的jar都扔到%JRE_HOME%/lib/ext下面,这个目录下的jar包会在Bootstrap Classloader工作完后由Extension Classloader来加载。非常方便,非常省心。:)

方法三、还是用AppClassloader来加载,不过不需要classpath参数了

在MANIFEST.MF中添加如下代码:

Class-Path: lib/some.jar

lib是和test.jar同目录的一个子目录,test.jar要引用的some.jar包就在这里面。

如果有多个jar包需要引用的情况:

Class-Path: lib/some.jar lib/some2.jar

每个单独的jar用空格隔开就可以了。注意使用相对路径。

另:如果META-INF 下包含INDEX.LIST文件的话,可能会使Class-Path配置失效。INDEX.LIST是Jar打包工具打包时生成的索引文件,删除对运行不产生影响。

方法四、自定义Classloader来加载

这种方法是终极解决方案,基本上那些知名java应用都是那么干的,如tomcat、jboss等等。

转载于:https://www.cnblogs.com/veryvalley/p/9883087.html

javar -jar 和 java -cp :命令行运行java代码相关推荐

  1. JAVA 的命令行运行

    作者:孙英鹏 撰写时间:2019年4月18日 JAVA 的命令行运行 今天要讲的是如何在命令行里进行打印运行.说明(此方法是老师的上课内容,我重新理解一遍) 首先创建一个文本文档,放在一个文件夹里,文 ...

  2. Windows命令行运行Java程序

    如何在Windows命令行运行Java程序 准备工作 1.安装JDK 安装JDK(Java Development Kit Java开发工具包 又称SDK)Oracle公司JDK下载地址,直接下载,然 ...

  3. php 运行thinkphp,thinkPHP cli命令行运行PHP代码

    下面由thinkphp教程栏目给大家介绍thinkPHP cli命令行运行PHP代码的方法,希望对需要的朋友有所帮助! 这几天在做项目的过程中,刚好需要用到 在thinkPHP中利用cli来运行 某个 ...

  4. jar包如何在命令行运行

    jar包在命令行运行 方式一:有绑定主类(有main函数入口) java -jar xxx.jar 方式二:无需绑定主类,可自行指定 java -cp xxx.jar xxx.main.Class 如 ...

  5. JAVA 命令行运行java项目

    多年以来 一直使用的是IDE 来写java 项目,导致很多的最基础的东西都渐渐模糊了. 最近遇到一个问题就是如果命令行来运行一个java项目 当然这不是初学的那个运行 HelloWord.java , ...

  6. java执行class找不到_命令行运行java的class文件提示找不到或无法加载主类

    问题如下 TestOne.javapackage moon.star; public class TestOne { public void fTestOne() { System.out.print ...

  7. java 命令行 编译 jar文件_用命令行编译java并生成可执行的jar包

    如果想用java编写一个可视化小程序,碰巧手头没有IDE的话,可以用命令行来完成编译.打包等工作. 拿自己编写的"java记事本"为例,介绍一下这个过程: 1.编写源代码. 编写源 ...

  8. java 程序命令_命令行运行JAVA程序

    如果出现找不到变量,核查环境变量是否配置好 可以运行javac java java -version看是否正常 注意要在对应的目录下 核查java文件里边的名字 class文件名是否与java文件名一 ...

  9. java命令行运行 package_使用命令行运行Java程序

    很久没有试过用Java命令行来运行程序了.今天用的时候都感觉有点不太顺利了.所以特别记下来,以免后边什么时候又忘掉. 首先是将编写好的Java程序放在某一文件夹下边.(本文以D盘javabasecod ...

  10. 怎么用命令行运行.java文件

    第一步 假如在e盘里有个文件夹名为Java,在Java文件夹里有一个事先写好的.java程序,如下: 第二步 打开命令行窗口(Window+R),输入cmd,点确定,如下: 第三步 转到HelloWo ...

最新文章

  1. 秒过,度目智慧通行让常态化防疫更高效
  2. 百度贴吧——因百度账号策略调整导致长时间未登录的账号(最后登录在2017年6月1日以前)网页端无法登陆、移动端异常解决方案
  3. 顺序查找法,用函数实现。
  4. 【GIF动画+完整可运行源代码】C++实现 快速排序——十大经典排序算法之六
  5. 关于 mahout factorize-movielens-1M.sh 执行
  6. Flowable 数据库表结构 ACT_RE_DEPLOYMENT
  7. Springsecurity之认证过程简析
  8. ZOJ 1094 带括号的矩阵连乘
  9. Linux系统上安装JDK和Tomcat服务器
  10. Security+ 学习笔记32 云安全控制
  11. 利用Keydown事件阻止用户输入
  12. Dorado7自定义下拉框
  13. vant附带样式去除
  14. java前沿技术有哪些,写给正在求职的Java开发
  15. 软件考试(一)计算机技术与软件专业技术资格(水平)考试(以下简称软件水平考试)含金量最高,与职称挂钩。
  16. java.util包
  17. ssm实战(1)------数据库表结构
  18. 什么蓝牙耳机性价比高?四款高性价比蓝牙耳机推荐
  19. 电脑录屏怎么录?超详细的录屏教程来了
  20. 万象:庸人容易因欠缺自知之明而自我膨胀

热门文章

  1. 8. 额外的并发实用程序(Additional Concurrency Utilities)
  2. Prototype使用$F()函数
  3. 【渝粤教育】国家开放大学2018年秋季 2505T学前儿童社会教育 参考试题
  4. 【渝粤教育】国家开放大学2018年春季 0222-21T模拟电子电路 参考试题
  5. 2017北理复试机试题
  6. LeetCode刷题系列(三)排序
  7. ubuntu16.04下ROS操作系统学习笔记(五)gazebo物理仿真环境搭建、加载服务端模型数据减少报错
  8. c# winform 窗体间的传值
  9. SVN的各种符号含义,svn的星号,感叹号,问号等含义
  10. 最基础的Python的socket编程入门教程