包含java-cpclasspath的词条

JAVA中“path”是什么意思?

当你在编译 Java 代码时需要通过 javac.exe(编译程序)和 Java.exe(运行程序)。

javac.exe 使用的路径就是 path,设置正确才能够直接使用 javac abc.java 命令。

java.exe 使用的就是 classpath,设置正确才能够直接使用 java abc 命令。

我就是由于这一步出问题了,输入命令的时候一直都是通过 java -cp classpath; abc 来运行程序的。

试着重新设置一下JAVA_HOME和PATH

如JAVA_HOME = C:\Java\jdk1.6.0_20

在PATH环境变量的末尾增加 %JAVA_HOME%\bin,与前一个变量用英文分号;间隔

java -Xmx512M -cp 是什么意思啊

java 主执行情况,用于启动JAVA程序。

-Xms是设置虚拟机的初始分配的堆内存大小, 如果程序非常占内存, 需要用这个参数设置。

-cp就是classpath, 加载类的路径,用于类加载器搜索运行时相关类。

常常一起配合使用的还有以下几个参数

-Xmx512m JVM最大允许分配的堆内存,按需分配。

-XX:PermSize=64M JVM初始分配的非堆内存。

-XX:MaxPermSize=128M JVM最大允许分配的非堆内存,按需分配。

这些参数设置保障程序稳定运行,可以防止内存溢出的错误。

JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。

更多关于内存优化的问题请参考《JVM调优总结 -Xms -Xmx -Xmn -Xss – unixboy – ITeye技术网站》

包含java-cpclasspath的词条

java-cp是什么意思?为什么要跟目录?

cp 是 classpath的缩写,后面放的是依赖的jar包,jar目录,class的根路径之类。

java与javac的-classpath和-cp

没有区别,除了一个是缩写,一个是全称之外,功能是一模一样的。

java中classpath的值是多少?

查看文章 JAVA中classPath全面解析 2009年08月22日 14:15

# 摘要

Class Path是Java执行时期环境用来搜寻类别与其它资源所用之路径。Class Sear

ch Path(通常使用Class Path这个缩写名称比较为人所知)可以在呼叫SDK工具程

式时使用-classpath或者是设定CLASSPATH环境变数。建议是使用-classpath选项,

因为您可以独立的为每一个应用程式设定,而不会影响其它的应用程式,且不会有

其它的应用程式来改变这个值。

1 C: sdkTool -classpath classpath1;classpath2…

-或-

1 C: set CLASSPATH=classpath1;classpath2…

在这边:

sdkTool:是一个命令列工具程式,像是java、javac 或 javadoc.

classpath1;classpath2:指向.jar、.zip或 .class档案的Class Path,每一个cl

asspath都应以档名或目录名称(这与您所要设定的classpath有关)作结束。

* 对於一个包括.class的.jar或.zip档案而言,class path要以.zip或.jar档案的

名称作结束。

* 对於一个未命名的package而言,class path要以包括所有.class档案的目录作结

束。

* 对於一个已命名的package而言,class path要以包括”根”package(完整packag

e名称的第一个package)的目录名称作结束。

多个路径项目要以 分号 作区隔,使用set指令,重要的是等号两边不可有空白。

预设的class path是目前的目录,设定CLASSPATH变数或使用-classpath命令列选项

时会覆盖这个预设,所以如果您要在目前的搜寻路径中包括目前的目录,您必须在

新设定中包括”.” 。

即不是目录也不是文件档案(.zip或.java)的classpath会被忽略。

# 说明

class path告诉SDK工具程式与应用程式要到哪边寻找第三元件(third-party)与

使用者定义的classes,也就是它们非Java延伸套件或非Java平台的一部份。在您使

用javac编译器编译类别时,需要使用class path来找出任何所需的套件 — 预设是

目前的目录,以方便找到这些类别。 Java2 SDK、JVM与其它的SDK工具藉由搜寻Ja

va平台、classes、其它延伸classes与class path来找到所需的classes,以这个顺

序(要瞭解搜寻策略的细节,请看如何寻找Classes, How Classes Are Found),

大部份应用程式所用的类别库就可以利用延伸套件机制(extensions mechanism)

,在您载入一个不在目前目录的类别或它的其它子目录且它们不在伸延伸套件机制

中时,您所要作的就是设定class path。

如果您从旧版本的SDK升级上来,在您的启动设定中可能包括已经不再使用的CLASS

PATH设定,您必须将这些非特定应用程式的设定移除,像是classes.zip,一些使用

到Java虚拟机器的第三元件应用程式可能会更改您的CLASSPATH环境变数,以将它们

所使用的程式库包括进去,这些设定则可以保留。

在您要求JVM或其它SDK工具程式时,您可以在使用Java工具程式时藉由-classpath

选项来改变class path,或是使用CLASSPATH环境变数来指定。建议是使用-classp

ath选项会比设定CLASSPATH环境变数来得好,因为您可以为每一个应用程式分别设

定,而不会影响其它的应 用程式,而其它应用程式也不会改变这个值。

Classes可以被储存在目录(资料夹)或是在文件档案(archive files),Java平

台的classes是被储存在rt.jar,要瞭解文件档案的细节或是class path如何运作的

资讯,请看看稍後小节的 “瞭解class path与package名称”。

重要、注意:一些旧版本的JDK软体在预设的class path中包括了jdk-dir/class

es项目,这些目录的存在是为了被JDK软体使用,而不应被应用程式classes使用。

应用程式类别应该被放在JDK目录结构之外的其它目录,用这种方式,新的JDK就不

会强迫您重新安装应用程式classes,为了要与旧版本相容,必须使用jdk-dir/c

lasses目录作为类别库的的应用程式,在目前的版本也可以运作,但不保证在未来

的版本中仍可以运作。

# 使用SDK工具程式的-classpath选项

SDK工具程式 java、jdb、javac与javah拥有一个-classpath项目,当执行工具程式

时,它用於取代由CLASSPATH环境变数所设定的路径,在改变class path设定时,这

是个建议使用的选项,因为每一个应用程式可以拥有自已所需的class path,而不

会与其它应用程式相互干扰。

执行时期工具程式java也有一个 -cp 选项,这个选项是-classpath的缩写名称。

对於一些相当特殊的例子来说,java与javac都拥有一些项目可以让您改变它们用来

找到专属类别库的路径,然而绝大多数的使用者从未需要使用这些项目。

# 使用CLASSPATH环境变数

一般而言,建议您使用-classpath命令列选项,就如同上面所提过的,这个小节将

告让您如何设定CLASSPATH环境变数,如果您想这麼作的话,或者是想清除之前安装

所留下的设定。

设定 CLASSPATH:

CLASSPATH环境变数可以藉由set指令来修改,格式是:

1 set CLASSPATH=path1;path2 ….

路径应该以磁碟机代号开始,例如C:\,用这种方式,即使您切换至另一个磁碟机也

可以找得到classes。(举个例子来说,假如路径项目以斜线开始而您在磁碟机D:,

那麼classes将会预期是在D:,而不是C:)

清除 CLASSPATH:

如果您的CLASSPATH环境变数已经被设定为某个值,但是并不正确,或者是您的启动

档案或是命令稿被设定了错误的路径,您可以藉由以下来取消CLASSPATH的设定:

1 C: set CLASSPATH=

这个指令只取消目前的命令列提示视窗CLASSPATH设定,您应当删除或修正您的启动

设定,以保证您在下一次操作也会有正确的CLASSPATH设定。

改变启动设定:

如果CLASSPATH被设定於系统启动时,设定的地方则视您所使用的作业系统而定:

作业系统方法:

*Windows 95与98 检查autoexec.bat中的set指令

*其它(Windows NT、Windows 2000、….)使用控制台中的系统工具来设定CLASS

PATH变数

# 瞭解class path与package名称

Java的classes被组织为packages,它们对应於档案系统的目录结构,但是不像档案

系统,每当您指定一个package名称时,您指定整个package名称而不是部份名称,

例如,java.awt.Button的package名称是使用java.awt来指定。

例如,假设您要Java执行环境找到一个在 package名称 utility.myapp 中名叫Coo

l.class的class,假如该目录的路径是C:\java\MyClasses\utility\myapp,您要设

定class path以包括 C:\java\MyClasses。

要执行这个应用程式,您可以使用下面的JVM指令:

1 c: java -classpath C:\java\MyClasses utility.myapp.Cool

当应用程式执行时,JVM会使用class path设定来找到任一其它被定义於utility.m

yapp package(它被Cool类别使用)中的类别。

注意在指令中被指定的整个package名称,这是不可能的,例如,设定class path包

括C:\java\MyClasses\utility并使用指令java myapp.Cool,这麼作并不会找到cl

ass。

(您可能会想是什麼定义了一个class的package名称,答案是package名称是class

的一部份,而且不可被修改,除非重新编译)

注意:一个package指定机制的有趣的结果是,同一个package中的部份档案可以存

在於不同的目录,对於每一个class而言,package名称将会相同,但是每一个档案

的路径将会以class path中不同的目录开始。

目录与文件档案(archive files):

当classes被储存在目录(资料夹),像是c:\java\MyClasses\utility\myapp,那

麼class path项目指向包括package名称第一个元素的目录(在这个例子中是c:\ja

va\MyClasses,因为package名称是utility.myapp)

但是当classes被储存在文件档案时(a.zip或.jar档案),class path项目就是指

向且包括.zip或.jar的档案,例如,使用在.jar档案中的类别库,指令会像是:

1 C: java -classpath C:\java\MyClasses\myclasses.jar utility.myapp.Cool

多个指定:

要寻找C:\java\MyClasses中与C:\java\OtherClasses中的classes,您可以这麼设

定class path:

1 C: java -classpath C:\java\MyClasses;C:\java\OtherClasses …

注意两个路径是以分号作区隔。

指定顺序:

指定多个class path项目的顺序很重要,Java解码器(interpreter)会以class p

ath变数 中的顺序来於目录中寻找classes,在上面的例子中,Java解码器首先会在

目录C:\java\MyClasses中寻找所需的类别,只有在它於该目录中找不到适当名称的

类别时,解码器才会於C:\java\OtherClasses目录中寻找。

///////////

话说回来,

我们有没有办法, 将一些常用的 jar file 放到一个目录中 ex: commons-lib\

透过一个程式来自动 import commons-lib 之下的所有 jar

类似 tomcat 我们只要放到 lib 中, 程式会自动 import .

就可以 import and compile 了 ^^~

我想这是可行的.

但是现实中, 我们还要去判断重复的 class 该如何去设定.

看来, 要去 trace tomcat sourcecode 并且修改 ^^~

//////////////

javac.exe有一个参数-extdirs可以下, 我看它的说明

很像是下了这个就可以做到自动import指定目录下的jar档吧

不过java.exe没有

///////////

LoadClass

LoadLibrary

so many so on.

JDK allows compile at runtime.

/////////////

dear biology

我要的不是 LoadLibrary , 你这样还是需要指定你要哪个 library

应该是说, 我想要的是只要将相关的 jar file 放到一个指定的目录.

可以少去 complie 及 run 时候不需要设定 CLASSPATH.

////////////////////

刚刚测试了一下 ClassLoader 他可以把我们想要的 .jar 档全部载入 jvm 但是有

个小问题. 那就是 Class.forName(String) 这一个不一定会找到我们要的 class.

… 需要利用 class.forName(className, initialize, classloader). 但是需要

先指定 classloader… 这个是个问题….

原因是 Class.forName(string) 会取代成 Class.forName(string, true, curren

tClass.classloader)… 如果那个 classloader 本身(还有 parent classloader

)没有 这特定 library 存在, 那就无法抓到指定的 class…. 所以总归 还是一次

加入 CLASSPATH 比较好… 或则只好拜托人深入研究了…

[事实你可以利用 ClassLoader 半自动达到你要的东西….]

/////////

部分我测试用的 code: 希望多少有帮助…

java.net.URL u[]=new java.net.URL[1];

u[0]=new java.net.URL(“

);

java.net.URLClassLoader cl=java.net.URLClassLoader.newInstance(u,ClassLo

ader.getSystemClassLoader());

cl.loadClass(“BioTester.BioTestClass”).newInstance();

//org.apache.bcel.util.ClassLoader. //purpose?

//this will be failed: Class.forName(“BioTester.something”)

Object obj=Class.forName(“BioTester.something”,true,cl).newInstance();

//Object obj=cl.loadClass(“BioTester.something”).newInstance();

java.lang.reflect.Method m=obj.getClass().getMethod(“aaa”,null);

m.invoke(obj, null);

//////////////////

你们不会不知道吧?!

JRE/lib/ext 就是这个用途啊,让你放 third-party 的 library,JRE 启动时会把

自动载入里头的 jar(应该说 classloader 需要 resolve class 时会到这个目录下

来找)。

主要的问题是,安装 JDK 时一般人可能会装两个 JRE,一在 JDK 安装目录下的 J

RE 目录,一在(预设) Program files 目录下的 Java 目录。javac.exe 使用的是

JDK 所附的 private JRE(JDK/JRE),而执行 Java 程式则要看你的 path 定。

JDK\bin\java.exe, JDK\jre\bin\java.exe 使用的是 private JRE,program fil

es\java\jre1.x.x\bin\java.exe, WinNT(Windows)\system32\java.exe 使用的是

public JRE。javaw.exe 同上。

比较保险的做法是把 third-party library jar file 在 private JRE/public JR

E 各放一份,这样可确保编译时可以 resolve third-party classes,或是设定 p

ath 使得优先使用 private JRE(或乾脆就移除掉 public JRE)。

Eclipse 比较特别,你可以只把 third-party 放在 public JRE 就好,不需要放在

private JRE 也可以在编译时让编译器去参考到所需要的 class。

///////////////////

没错, 这就是我希望的功能,

摆在那边 install 没问题, 但是 uninstall 就会有问题了,

因为可能会有重复使用到的 jar files.

所以我希望能够指定一个目录

当我是个 application setup 完成之後,

目前的做法是在 run.bat 中设定相关的 CLASSPATH

此外, 对於一个 java 新手,

我也希望提供一个简单的方法管理及部署 jar files.

避免 CLASSPATH 设定的问题.

简单来说, 就是执行某个程式可以自由地增加目录相当 %JAVA_HOME%/lib/ext

接著我开发我的程式或执行我的程式,

而且透过那个程式可以做一些 jar files 的管理

例如说, 优先顺序, 重复剔除 等等的功能 ^^~

///////////////

我想jini兄跟Biologic兄应该都知道的…

但是我臆测可能他们认为放在JRE/lib/ext不是很恰当的方法

第一个问题就是将来使用者要自己把使用的classpath放在/jre/lib/ext

会造成使用者的困扰

二来 可能会有一些版本的冲突…

以前就有发生这个例子

就是抓了很多xml parser..

而每个里面又包了JAXP

结果有的包旧的有的包新的..

错误就这样产生了…

一般来讲还是在执行的时候给classpath才是上策

至於太多lib的话

我个人还是不喜欢程式里面用ClassLoader去抓…

我宁愿提供批次档给他执行

或是提供build.xml.. ant题供**/*.jar的写法

////////////////

同意 popcorny 的看法, 放在 JRE/lib/ext 下可行, 但”层级”太高, 尤其如果是在

web app(tomcat) 或 J2EE 的环境底下, 必须考虑 class loading 先後顺序的问题

(好像在spec中有定义.)

所以应该不会有任何一个java applicaion installation guide 要你把哪个 jar 放在

JRE/lib/ext 中

(但这好像不属於新手区的讨论 …)

///////////////////////

如果说是同一套 library 不同版本的冲突问题,最基本(可能也是最好的)解法是,

替每一个 application 提供一个批次档,指定专用的 classpath。或是写个 clas

sloader 会依照 application 的属性(xml file),到特定的目录去找 jar,但是这

没有办法套用在其他厂商提供的应用程式上。

一个比较可行的办法是,写一个 application launcher,拥有管理 jar library

及每个应用程式所倚赖的 library 的对应关系,然後要求使用者在执行任何 Java

application 时,都得透过 app launcher(app launcher 会启动特定的 classlo

ader 来载入 app 所需要的 jar)来启动(这很容易)。

//////////////////////////

很多 ext package 都是要求自己设定 classpath,指示把 ext-package jar 放进

Jre/lib/ext 也是有:Java Communications API。

/////////////////////

“很多 ext package 都是要求自己设定 classpath …”

这样比较好.

“指示把 ext-package jar 放进 Jre/lib/ext 也是有 …”

javax 是 java “extention”, 个人认为比较不像 “application”,

既然是 Java 的一部份, 建议直接放 jre/lib/ext 下也无可厚非,

但版本的问题可能会是 nightmare.

个人认为还是用 “application specific” classpath 好.

Application 把 jar 直接往 jre/lib/ext 放, 不是不可以, 而是*不应该*.

如果在 jre/lib/ext 下有一个 a.jar, 在classpath中有一个 a.jar,

在 WEB-INF/lib 下也有一个 a.jar,哪一个会先被用呢?

jini 兄提到的 uninstall 亦是个问题.

对新手来说, 建议把所有的 jar 往 jre/lib/ext 放可能方便些,

but may not be a good practice.

在CMD下用java命令出现“找不到或无法加载主类”问题

package是hellojava吧?那如果在E:/Workspace/hellojava/src/hellojava这目录下运行,应该

这样写: java -cp ../ hellojava.hello

或者用绝对路径: java -cp E:/Workspace/hellojava/src hellojava.hello

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月25日 18:26:31
下一篇 2024年3月25日 18:35:45

相关推荐

  • java开发网络安全,java安全开发规范

    红河java培训学校告诉你网络运营安全密钥的算法问题? 不要自己去实现安全框架 说真的,不要尝试自己去实现安全方面的代码,这太难了。几乎每个人都知道避免去实现加密等算法。同样道理,你的应用的安全栈的其余部分也是一样,可能需要花费很大,得到的风险也很大。 理解数据,并使用分层抽样 数据是确定整个过程策略的核心。图像质量可能会引入复杂性,需要谨慎处理。了解目录中…

    2024年5月19日
    2900
  • java调用枚举类,java枚举类使用

    如何使用java中的枚举类 1、枚举的本质是类,在没有枚举之前,仍然可以按照java最基本的编程手段来解决需要用到枚举的地方。枚举屏蔽了枚举值的类型信息,不像在用public static final定义变量必须指定类型。 2、用法一:常量 在JDK5 之前,我们定义常量都是: public static fianl… 。现在好了,有了枚举,可以…

    2024年5月19日
    4000
  • 超级马里奥制造java,超级马里奥制造手机版

    马里奥制造 在马里奥制造游戏中进行1v1。超级马里奥制造系列是任天堂公司制作并发行的游戏系列,马里奥制造单打的意思是在马里奥制造游戏中进行1v1,单打就是一个选手对另一个选手。 在关卡创作界面下,切换到《马里奥制造二》以外的任意游戏风格。 点击屏幕右上角的放大镜图标。 展开绿色的敌人选单,找到太阳这个敌人。 把太阳拖动到关卡任意位置。 进入游戏:启动马里奥制…

    2024年5月19日
    3300
  • java判断输入回车,c语言判断输入回车

    Java:Scanner(System.in)获取的输入为什么带回车符? 当通过new Scanner(System.in)创建一个Scanner,控制台会一直等待输入,直到敲回车键结束,把所输入的内容传给Scanner,作为扫描对象。如果要获取输入的内容,则只需要调用Scanner的nextLine()方法即可。 因为Scanner类默认的分隔符就是空格,…

    2024年5月19日
    3300
  • java语言转换c语言,java转其他语言

    怎样把java转换成C语言 1、这段代码涉及到密钥生成和加密操作,需要引入相关的加密库来实现。在C语言中,可以使用 OpenSSL 库来实现AES加密和解密操作。 2、理论上讲,任何不同类型的程序设计语言都可以相互转换,只不过是实现的语句不同罢了。 3、Java没有枚举、联合类型,因为Java认为没有必要。将可有可无的语言元素去掉是Java对C/C++做出的…

    2024年5月19日
    5100
  • java与c,JAVA与C#

    Java编译过程与c/c++编译过程有何不同 1、因此在linux下编译的java代码也可以直接运行在Windows或者其它装有虚拟机的系统下,反之亦然。 2、让我们在来看看Java和c语言的区别,首先Java是面向对象的在里面,而C是完全面向过程的。Java可以跨平台,不同的操作系统都可以通过JVM来解释Java程序,而c语言的有些指令只在某些操作系统中才…

    2024年5月19日
    3000
  • java实现支付宝转账,java实现支付宝转账的方法

    java调用支付宝接口怎么保证安全 1、签名 根据用户名或者用户id,结合用户的ip或者设备号,生成一个token。 2、接口签名方案,尤其是在接口请求量很大的情况下,依然很稳定。换句话说,你可以将接口签名看作成对token方案的一种补充。但是如果想把接口签名方案,推广到前后端对接,答案是:不适合。 3、[1]脚本攻击:利用JavaScript 注入 到后台…

    2024年5月19日
    3300
  • java对象赋值null吗,Java判断对象是否为null

    java中一个对象的属性是null还是空字符串 1、null表示的是一个对象的值,而并不是一个字符串。例如声明一个对象的引用,String a = null ;表示的是一个空字符串,也就是说它的长度为0。 2、对象没有初始化之前是null,String的默认值是null,如果是赋值String s =;表示的是空字符串。 3、NULL是空,就是什么也没有,一…

    2024年5月19日
    3300
  • java字符串转hex,Java字符串转日期

    java中如何将byte[]里面的数据转换成十六进制? 1、用Integer.toHexString方法即可将十进制装成十六进制。 2、方案一:直接利用BigInteger的方法,应该是最简单的方案了。 3、byte arr[]={-85, -51, -28, 21, 3}; String s=;for(int i=0;iarr.length;i++)s+=…

    2024年5月19日
    3600
  • 关于java编程的书籍推荐,java编程语言书籍

    学java需要学哪些看什么书 有关Java的书籍有很多,但对于新手来说,需要选择通俗易懂而又内容丰富的,下面为您推荐几本:《Head First Java》Java入门书籍,适合新手。 先推荐一下合适的书 《疯狂java开发讲义》《疯狂的讲义》这本书比较适合自学者,内容比较项目化,实操方法很多,如果你想进行java开发的深入学习,不妨看看这本书。 《测试驱动…

    2024年5月19日
    3500

发表回复

登录后才能评论



关注微信