原文出处:http://blog.csdn.net/zhuying_linux/article/details/7714194。感谢作者的分享

java -cp classpath

Specify a list of directories, JAR archives, and ZIP archives to  search  for  class  files.  Class  path entries  are separated by colons (:). Specifying -classpath or -cp overrides any setting of the CLASSPATH environment variable.

As a special convenience, a class path element containing a basename of  * is considered equivalent to specifying a list of all the files in the directory with the extension .jar or .JAR (a java program  cannot  tell the difference between the two invocations).

For  example,  if directory foo contains a.jar and b.JAR, then the class path element foo/* is expanded to a A.jar:b.JAR, except that the order of jar files is unspecified. All jar files in  the  specified  directory, even  hidden  ones,  are included in the
list. A classpath entry consisting simply of * expands to a list of all the jar files in the current directory. The CLASSPATH environment variable, where defined, will be simi-larly  expanded.  Any  classpath  wildcard expansion occurs before the Java virtual
machine is started -- no Java program will ever see unexpanded wildcards except by querying the environment. For example; by invoking System.getenv("CLASSPATH").

For more information on class paths, see Setting the Class Path.

查看文档得到以上信息,以下是查找到的资料:

-cp 参数后面是类路径,是指定给解释器到哪里找到你的.class文件,

写法: 

java -cp .;myClass.jar packname.mainclassname   

classpath中的jar文件能使用通配符,如果是多个jar文件,要一个一个地罗列出来,从某种意义上说jar文件也就是路径。

要指定各个JAR文件具体的存放路径,相同路径有多个可使用通配符  

java -cp .;c:/classes/myClass.jar;d:/classes/*.jar packname.mainclassname



packname.mainclassname为包含main方法的完全限定类名,如果在classpath中有多个还有main方法的类,通过此命令可以方便选定程序的入口。

例如:

#!/bin/sh 

cd /home/work/bvpn/aaa/bin 

pwd 

nohup /usr/java/jdk1.6.0_11/bin/java -cp .:../lib/log4j-1.2.15.jar:/usr/java/jdk1.6.0_11/lib/dt.jar:/usr/java/jdk1.6.0_11/lib/tools.jar:/usr/java/jdk1.6.0_11/lib/:/usr/java/jdk1.6.0_11/lib/jradius-client.jar:../lib/mysql-connector-java-5.1.12-bin.jar  authAgent.AuthAgentMain
 2>&1  &

下面是一些遇到的问题:

1.jar -cp lib/referenced.jar -jar myworks.jar会执行报错,原因如下:

我们使用-jar选项的话java.exe会忽略-cp,-classpath,以及环境变量CLASSPATH的参数。

解决方法一:

不要使用-jar选项,直接调用含有main方法的class文件,这样-cp,-classpath以及环境变量里的CLASSPATH指定的参数就都能使用到了。

java -classpath ./lib/junit.jar:. test/Test1

解决方法二:

继续使用-jar选项,但是在MAINFEST.MF文件中指定引用到jar文件.

Class-Path: myplace/myjar.jar myplace/other.jar jardir/

另外说明一点:这个问题可能有些人遇不到,因为Java的版本不同的原因,我在Sun的JDK和IBM 1.5的JDK都遇到了这个问题,但是对于 IBM 1.4的JDK却没有类似问题

2. 批量加载包的方法:

(一)java命令引入jar时可以-cp参数,但时-cp不能用通配符(多个jar时要一个个写,不能*.jar),通常的jar都在同一目录,且多于1个。前些日子刚刚发现一个参数-Djava.ext.dirs~

如:java -Djava.ext.dirs=lib MyClass  【同样的weblogic中就有这样的参数:-Dweblogic.ext.dirs=$BEA_HOME/patch_weblogic920/profiles/default/sysext_manifest_classpath】

(二)通过Unix shell设置CLASSPATH方式加载(shell实在是方便)

CLASSPATH=`find ../lib -name *.jar|xargs|sed "s/ /:/g"` 

CLASSPATH=".:$CLASSPATH

(三)cp 参数后面是类路径,是指定给解释器到哪里找到你的.class文件。使用java -cp命令可以调用一个其他目录下的带有main函数的类。格式为java -cp class文件的路径,下面的例子采用的相对路径。

String commandLine = "java -cp "+ "..\\kwicByPipeServer\\bin KWIC";

Process p = Runtime.getRuntime().exec(commandLine);

这样就可以调用了。

PS:

$BEA_HOME/wlserver_10.3/server/lib/weblogic.jar的classcompatibilityinspector-file-0.xml文件记录了可用的类~

java -cp用法的更多相关文章

  1. java -cp 用法介绍

    java -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上分号“;” 分隔,linux上是分号“:”分隔.不支持通 ...

  2. Java -cp 命令行引用多个jar包的简单写法(Windows、Linux

    1.Windows下用法 在Windows上,可以使用 用法:java your-jar-lib-folder/* your-main-class your-jar-lib-folder为存放一堆ja ...

  3. java -cp

    java -cp /home/hdp/log4jTest/log4j-1.2.17.jar:/home/hdp/log4jTest/testLog.jar:/home/hdp/log4jTest/co ...

  4. 【转】java list用法示例详解

    转自:http://www.jb51.net/article/45660.htm java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对java list用法做了详解. Lis ...

  5. Java List 用法代码分析 非常详细

    Java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对Java List用法做了详解. List:元素是有序的(怎么存的就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3 ...

  6. Java split用法

    Java split用法 java.lang.string.split split 方法  将一个字符串分割为子字符串,然后将结果作为字符串数组返回. stringObj.split([separat ...

  7. Java Enum用法详解

    Java Enum用法详解 用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举 ...

  8. java -cp通配符

    JDK6支持java -cp后面跟通配符'*',试了一下发现还是需要注意: 错误方式(Wrong way): java  -cp /data/apps/lib/*.jar com.chinacache ...

  9. java -cp & java jar的区别

    java -cp java -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库和jar包,需要全路径到jar包,多个jar包之间连接符:window上分号“;”.Lin ...

随机推荐

  1. 微信小程序<web-view>嵌入网页后,小程序如何和网页交互传值?

    最近开发一个项目由于小程序某些组件的限制,然后想到嵌入网页,但是遇到一个问题:网页端调取数据的时候需要 小程序传递多个参数值才能用,如何传值呢? 最初我想到是<web-view src=&quo ...

  2. 【NOIP2012】旅行计划

    题解 双向链表加倍增... 正写着不一定能写对2333 终于写对了... 然而我的双向链表和别人的都不一样... 瑟瑟发抖... 代码 //by 减维 #include<cstdio> # ...

  3. DirectSound---输出设备基本操作(枚举、查询等)

    DirectSound是DirectX组件之一,提供了对音频设备的捕获和播放能力,同时它也是唯一几个支持Xp系统的音频技术之一. DirectSound主要有以下特点: 优点: 播放音频低延迟. 硬件 ...

  4. for循环找出2到100的质数(素数)

    思路: 1,一个数只有1和它本身两个因数,这个数叫质数. 2.注意:缩进这里else是for循环这个上下文的. 代码: for num in range(2,100): #为大循环变量num提供2-1 ...

  5. 基于opencv和mfc的摄像头采集代码(GOMFCTemplate2)持续更新

            编写带界面的图像处理程序,选择opencv+mfc是一种很好的选择:在读取摄像头数据方面,网上的方法很多,其中shiqiyu的camerads的方法是较好的.       基于现有资料 ...

  6. 深入理解JVM(六)——类加载器原理

    我们知道我们编写的java代码,会经过编译器编译成字节码文件(class文件),再把字节码文件装载到JVM中,映射到各个内存区域中,我们的程序就可以在内存中运行了.那么字节码文件是怎样装载到JVM中的 ...

  7. java数据结构与算法(一)

    1.数据结构概念 所谓的数据结构是数据之间的关系,都是为了提高程序效率而设计的. 分为逻辑关系和物理关系两种. 逻辑关系:人为的一种逻辑思维的认为. (1)集合:在一个范围内有多个数据,数据之间没有关 ...

  8. 前端学习:html基础学习四

    7.HTML表格(主要内容<table><caption><tr><th><td>标记) <table>标记 基本格式 < ...

  9. WPF 依赖属性源码 洞察微软如何实现DependencyProperty

    依赖属性DependencyProperty是wpf最重要的一个类,理解该类如何实现对学习wpf帮助很大! 终于找到了该类的源码!仔细阅读源码,看看微软如何玩的花招! File: Base\Syste ...

  10. EXP导出aud$报错EXP-00008,ORA-00904 解决

    主题:EXP导出aud$报错EXP-00008,ORA-00904 解决 环境:Oracle 11.2.0.4 问题:在自己的测试环境,导出sys用户下的aud$表报错. 1.故障现场 2.跟踪处理 ...