??xml version="1.0" encoding="utf-8" standalone="yes"?> JAR 文g是什么? 一?JAR 文g可以用于Q?br />
?用于发布和用类? JAR 文g格式提供了许多优势和功能Q其中很多是传统的压~格式如 ZIP 或?TAR 所没有提供的。它们包括: ?安全性?/strong> 可以?JAR 文g内容加上数字化签名。这P能够识别{的工具就可以有选择Cؓ您授予Y件安全特权,q是其他文g做不到的Q它q可以检代码是否被改q?/p>
?减少下蝲旉?/strong> 如果一?applet 捆绑C?JAR 文g中,那么览器就可以在一?HTTP 事务中下载这?applet 的类文g和相关的资源Q而不是对每一个文件打开一个新q接?/p>
?压羃?/strong>JAR 格式允许您压~文件以提高存储效率?/p>
?传输q_扩展?/strong> Java 扩展框架(Java Extensions Framework)提供了向 Java 核心q_d功能的方法,q些扩展是用 JAR 文g打包?Java 3D ?JavaMail 是?Sun 开发的扩展例子)?/p>
?包密?/strong> 存储?JAR 文g中的包可以选择q行密封Q以增强版本一致性和安全性。密一个包意味着包中的所有类都必d同一 JAR 文g中找到?/p>
?包版本控制?/strong> 一?JAR 文g可以包含有关它所包含的文件的数据Q如厂商和版本信息?/p>
?可移植性?/strong> 处理 JAR 文g的机制是 Java q_核心 API 的标准部分? 压羃的和未压~的 JAR META-INF 目录 ?MANIFEST.MF?/strong> q个 manifest 文g定义了与扩展和包相关的数据?/p>
?INDEX.LIST?/strong> q个文g?jar 工具的新选项 -i 生成Q它包含在应用程序或者扩展中定义的包的位|信息。它?JarIndex 实现的一部分Qƈq装蝲器用于加速类装蝲q程?/p>
?xxx.SF?/strong> q是 JAR 文g的签名文件。占位符 xxx 标识了签名者?/p>
?xxx.DSA?/strong> 与签名文件相兌的签名程序块文gQ它存储了用于签?JAR 文g的公q名? jar 工具 ?1. 常见?jar 工具用法
可执行的 JAR 创徏可执?JAR Main-Class: com.mycompany.myapp.Sample 然后Q像q样创徏 JAR 文gQ?/p>
jar cmf manifest ExecutableJar.jar application-dir 所要做的就是这些了 -- 现在可以?java -jar 执行q个 JAR 文g ExecutableJar.jar?/p>
一个可执行?JAR 必须通过 menifest 文g的头引用它所需要的所有其他从?JAR。如果用了 -jar 选项Q那么环境变?CLASSPATH 和在命o行中指定的所有类路径都被 JVM 所忽略?/p>
启动可执?JAR java -jar ExecutableJar.jar 包密?br />
密封 JAR 文g中的一个包意味着在这个包中定义的所有类都必d同一?JAR 文g中找到。这使包的作者可以增强打包类之间的版本一致性。密还提供了防止代码篡改的手段?/p>
要密包Q需要在 JAR ?manifest 文g中ؓ包添加一?Name _然后加上gؓ“true”?Sealed 头。与可执行的 JAR 一P可以在创?JAR Ӟ通过指定一个具有适当头元素的 manifest 文g密封一?JARQ如下所C: Name: com/samplePackage/ Name 头标识出包的相对路径名。它以一?#8220;/”l束以与文g名区别。在 Name 头后面第一个空行之前的所有头都作用于?Name 头中指定的文件或者包。在上述例子中,因ؓ Sealed 头出现在 Name 头后q且中间没有IQ所?Sealed 头将被解释ؓ只应用到?com/samplePackage 上?/p>
如果试图从密包所在的 JAR 文g以外的其他地方装载密包中的一个类Q那?JVM 抛Z?SecurityException?/p>
扩展打包 假设 extension1.jar ?extension2.jar 是同一个目录中的两?JAR 文gQextension1.jar ?manifest 文g包含以下_ Class-Path: extension2.jar q个头表?extension2.jar 中的cL extension1.jar 中的cȝ扩展cRextension1.jar 中的cd以调?extension2.jar 中的c,q且不要?extension2.jar 处在c\径中?/p>
在装载用扩展机制的 JAR ӞJVM 会高效而自动地在Class-Path 头中引用?JAR d到类路径中。不q,扩展 JAR 路径被解释ؓ相对路径Q所以一般来_扩展 JAR 必须存储在引用它?JAR 所在的同一目录中?/p>
例如Q假讄 ExtensionClient 引用了类 ExtensionDemo,它捆l在一个名?ExtensionClient.jar ?JAR 文g中,而类 ExtensionDemo 则捆l在 ExtensionDemo.jar 中。ؓ了 ExtensionDemo.jar 可以成ؓ扩展Q必d ExtensionDemo.jar 列在 ExtensionClient.jar ?manifest ?Class-Path 头中Q如下所C: Manifest-Version: 1.0 在这?manifest ?Class-Path 头的值是没有指定路径?ExtensionDemo.jarQ表?ExtensionDemo.jar ?ExtensionClient JAR 文g处在同一目录中?/p>
JAR 文g中的安全?br />
JAR 文g可以?jarsigner 工具或者直接通过 java.security API {。一个签名的 JAR 文g与原来的 JAR 文g完全相同Q只是更C它的 manifestQƈ?META-INF 目录中增加了两个文gQ一个签名文件和一个签名块文g?/p>
JAR 文g是用一个存储在 Keystore 数据库中的证书签名的。存储在 keystore 中的证书有密码保护,必须?jarsigner 工具提供q个密码才能?JAR 文g{?/p>
JAR 的每一位签名者都由在 JAR 文g?META-INF 目录中的一个具?.SF 扩展名的{文g表示。这个文件的格式cM?manifest 文g -- 一l?RFC-822 头。如下所C,它的l成包括一个主要部分,它包括了q名者提供的信息、但是不特别针对M特定?JAR 文g,q有一pd的单独的,q些也必须包含?menifest 文g中。在验证一个签名的 JAR Ӟ签名文件的摘要g?JAR 文g中的相应计的摘要D行比较?/p>
清单 1. { JAR 中的 Manifest ?signature 文g Contents of signature file META-INF/MANIFEST.MF 数字{ Keystore 所?keystore ?密钥和信ȝ证书?都是用唯一别名讉K的。别名是在用 keytool -genkey 命o生成密钥?公钥和私?q在 keystore 中添加项时指定的。之后的 keytool 命o必须使用同样的别名引用这一V?/p>
例如Q要用别?#8220;james”生成一个新的公?U钥对ƈ公钥包装到自签名的证书中,要用下q命令: keytool -genkey -alias james -keypass jamespass q个命o序列指定了一个初始密?#8220;jamespass”Q后l的命o在访?keystore “jamesKeyStore”中与别名“james”相关联的U钥Ӟ需要这个密码。如?keystore“jamesKeyStore”不存在,?keytool 会自动创建它?/p>
jarsigner 工具 假设像上qC子那样创Z keystore “jamesKeyStore”Qƈ且它包含一个别名ؓ“james”的密钥,可以用下面的命o{一?JAR 文gQ?/p>
jarsigner -keystore jamesKeyStore -storepass jamesKeyStorePass q个命o用密?#8220;jamesKeyStorePass”从名?#8220;jamesKeyStore”?keystore 中提出别名ؓ“james”、密码ؓ“jamespass”的密钥,q对 Sample.jar 文g{、创Z个签名的 JAR -- SSample.jar?/p>
jarsigner 工具q可以验证一个签名的 JAR 文gQ这U操作比{ JAR 文g要简单得多,只需执行以下命oQ?/p>
jarsigner -verify SSample.jar 如果{?JAR 文g没有被篡改过Q那?jarsigner 工具׃告诉?JAR 通过验证了。否则,它会抛出一?SecurityExceptionQ?表明哪些文g没有通过验证?/p>
q可以用 java.util.jar ?java.security API 以编E方式签?JAR(有关l节参阅参考资?。也可以使用?Netscape Object Signing Tool q样的工兗?/p>
JAR 索引 ?JDK 1.3 以后QJAR 文g格式开始支持烦引以优化|络应用E序中类的搜索过E,特别?applet。JarIndex 机制攉?applet 或者应用程序中定义的所?JAR 文g的内容,q将q些信息存储到第一?JAR 文g中的索引文g中。下载了W一?JAR 文g后,applet c装载器用收集的内容信息高效地装?JAR 文g。这个目录信息存储在?JAR 文g?META-INF 目录中的一个名?INDEX.LIST 的简单文本文件中?/p>
创徏一?JarIndex 您将使用下述命o?JarIndex_Main.jar、JarIndex_test.jar ?JarIndex_test1.jar 创徏一个烦引文Ӟ jar -i JarIndex_Main.jar JarIndex_test.jar SampleDir/JarIndex_test1.jar INDEX.LIST 文g的格式很单,包含每个已烦引的 JAR 文g中包含的包或者类的名字,如清?2 所C: 清单 2. JarIndex INDEX.LIST 文gCZ JarIndex-Version: 1.0 l束?
2.可以通过Eclipse的Update Site安装方式Q?a >http://subclipse.tigris.org/update_1.4.x或?a target="_blank" >下蝲下来之后Q解压羃复制到Eclipse目录卛_?br />
3.启动E序后在Eclipse配置的Team里面׃多出SVNQ就可以q行配置了?br />
4.惌提交一个项目,寚w目点d键Team——Share project可以将目导入SVN了?br />
需要注意的是,请不要将动态生成的目录d到SVNQ否则其他hCheck out的之后,再UpdateҎ出错Q例如classes目录Q不需要提交上去,本地可以了?br />
惌Ҏ本地和服务器上的源代码,请用Team——Synchronize with RepositoryQ列Z同的文g之后Q双击,既可以对比两个文件?br />
WebService目会生成一个。apt_generated目录Q里面包含了一些源代码Q提交的时候不需要提交上去,MyEclipse在获得SVN的项目之后,会自动生成这个目录和底下的文件?
]]>
主键由外部程序负责生成,无需Hibernate参与?
2) hilo
通过hi/lo 法实现的主键生成机Ӟ需要额外的数据库表保存主键生成历史状态?
3) seqhilo
与hilo cMQ通过hi/lo 法实现的主键生成机Ӟ只是主键历史状态保存在Sequence中,适用于支持Sequence的数据库Q如Oracle?
4) increment
主键按数值顺序递增。此方式的实现机制ؓ在当前应用实例中l持一个变量,以保存着当前的最大|之后每次需要生成主键的时候将此值加1作ؓ主键?
q种方式可能产生的问题是Q如果当前有多个实例讉K同一个数据库Q那么由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常。因此,如果同一数据库有多个实例讉KQ此方式必须避免使用?
5) identity
采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL中的主键生成机制?
6) sequence
采用数据库提供的sequence 机制生成主键。如Oralce 中的Sequence?
7) native
由HibernateҎ底层数据库自行判断采用identity、hilo、sequence其中一U作Z键生成方式?
8) uuid.hex
由HibernateZ128 位唯一g生算法生?6 q制数|~码后以长度32 的字W串表示Q作Z键?
9) uuid.string
与uuid.hex cMQ只是生成的主键未进行编码(长度16Q。在某些数据库中可能出现问题Q如PostgreSQLQ?
10) foreign
使用外部表的字段作ؓ主键?
]]>
JAR 文g格式以流行的 ZIP 文g格式为基Q用于将许多个文件聚集ؓ一个文件。与 ZIP 文g不同的是QJAR 文g不仅用于压羃和发布,而且q用于部|和装库、组件和插gE序Qƈ可被像编译器?JVM q样的工L接用。在 JAR 中包含特D的文gQ如 manifests 和部|描q符Q用来指C工具如何处理特定的 JAR?/p>
?作ؓ应用E序和扩展的构徏单元
?作ؓlg、applet 或者插件程序的部v单位
?用于打包与组件相兌的辅助资?
jar 工具在默认情况下压羃文g。未压羃?JAR 文g一般可以比压羃q的 JAR 文g更快地装载,因ؓ在装载过E中要解压羃文gQ但是未压羃的文件在|络上的下蝲旉可能更长?/p>
大多?JAR 文g包含一?META-INF 目录Q它用于存储包和扩展的配|数据,如安全性和版本信息。Java 2 q_识别q解?META-INF 目录中的下述文g和目录,以便配置应用E序、扩展和c装载器Q?/p>
Z?JAR 文g执行基本的Q务,要用作为Java Development Kit 的一部分提供?Java Archive Tool (jar 工具)。用 jar 命o调用 jar 工具。表 1 昄了一些常见的应用Q?/p>
功能
命o
用一个单独的文g创徏一?JAR 文g
jar cf jar-file input-file...
用一个目录创Z?JAR 文g
jar cf jar-file dir-name
创徏一个未压羃?JAR 文g
jar cf0 jar-file dir-name
更新一?JAR 文g
jar uf jar-file input-file...
查看一?JAR 文g的内?/td>
jar tf jar-file
提取一?JAR 文g的内?/td>
jar xf jar-file
从一?JAR 文g中提取特定的文g
jar xf jar-file archived-file...
q行一个打包ؓ可执?JAR 文g的应用程?/td>
java -jar app.jar
一个可执行?jar 文g是一个自包含?Java 应用E序Q它存储在特别配|的JAR 文g中,可以?JVM 直接执行它而无需事先提取文g或者设|类路径。要q行存储在非可执行的 JAR 中的应用E序Q必d它加入到您的c\径中Qƈ用名字调用应用程序的ȝ。但是用可执行?JAR 文gQ我们可以不用提取它或者知道主要入口点可以运行一个应用程序。可执行 JAR 有助于方便发布和执行 Java 应用E序?/p>
创徏一个可执行 JAR 很容易。首先将所有应用程序代码放C个目录中。假讑ֺ用程序中的主cL com.mycompany.myapp.Sample。您要创Z个包含应用程序代码的 JAR 文gq标识出ȝ。ؓ此,在某个位|?不是在应用程序目录中)创徏一个名?manifest 的文Ӟq在其中加入以下一行:
既然我们已经自q应用E序打包C一个名?ExecutableJar.jar 的可执行 JAR 中了Q那么我们就可以用下面的命o直接从文件启动这个应用程序:
Sealed: true
扩展?Java q_增加了功能,?JAR 文g格式中已l加入了扩展机制。扩展机制?JAR 文g可以通过 manifest 文g中的 Class-Path 头指定所需要的其他 JAR 文g?/p>
Class-Path: ExtensionDemo.jar
Keystore 数据?/strong>
Manifest-Version: 1.0
Created-By: 1.3.0 (Sun Microsystems Inc.)
Name: Sample.java
SHA1-Digest: 3+DdYW8INICtyG8ZarHlFxX0W6g=
Name: Sample.class
SHA1-Digest: YJ5yQHBZBJ3SsTNcHJFqUkfWEmI=
Contents of signature file META-INF/JAMES.SF
Signature-Version: 1.0
SHA1-Digest-Manifest: HBstZOJBuuTJ6QMIdB90T8sjaOM=
Created-By: 1.3.0 (Sun Microsystems Inc.)
Name: Sample.java
SHA1-Digest: qipMDrkurQcKwnyIlI3Jtrnia8Q=
Name: Sample.class
SHA1-Digest: pT2DYby8QXPcCzv2NwpLxd8p4G4=
一个数字签名是.SF {文g的已{版本。数字签名文件是二进制文Ӟq且?.SF 文g有相同的文g名,但是扩展名不同。根据数字签名的cd -- RSA、DSA 或?PGP -- 以及用于{ JAR 的证书类型而有不同的扩展名?/p>
要签名一?JAR 文gQ必首先有一个私钥。私钥及其相关的公钥证书存储在名?keystores 的、有密码保护的数据库中。JDK 包含创徏和修?keystores 的工兗keystore 中的每一个密钥都可以用一个别名标识,它通常是拥有这个密钥的{者的名字?/p>
-validity 80 -keystore jamesKeyStore
-storepass jamesKeyStorePass
jarsigner 工具使用 keystore 生成或者验?JAR 文g的数字签名?/p>
-keypass jamespass -signedjar SSample.jar Sample.jar james
如果一个应用程序或?applet 捆绑到多?JAR 文g中,那么c装载器׃用一个简单的U性搜索算法搜索类路径中的每一个元素,qɾc装载器可能要下载ƈ打开许多?JAR 文gQ直到找到所要的cL者资源。如果类装蝲器试囑֯找一个不存在的资源,那么在应用程序或?applet 中的所?JAR 文g都会下蝲。对于大型的|络应用E序?appletQ这会导致启动缓慢、响应迟~ƈ费带宽?/p>
可以通过?jar 命o中指?-i 选项创徏一?JarIndex。假设我们的目录l构如下图所C:
JarIndex
JarIndex_Main.jar
sp
JarIndex_test.jar
Sample
SampleDir/JarIndex_test1.jar
org
org/apache
org/apache/xerces
org/apache/xerces/framework
org/apache/xerces/framework/xml4j
JAR 格式q远出了一U压~格式,它有许多可以改进效率、安全性和l织 Java 应用E序的功能。因些功能已l徏立在核心q_ -- 包括~译器和c装载器 -- 中了Q所以开发h员可以利?JAR 文g格式的能力简化和改进开发和部vq程?/p>
转自Q?a target="_blank">http://linxh.bokee.com/2946294.html
]]>
开?#8594;q行: regsvr32 /u zipfldr.dll
2、减开机磁盘扫描等待时_重启时候马上你会看到效果?
开?#8594;q行:chkntfs /t:0
3、删除系l备份文?在各UYg安装妥当之后Q其实XP需要更新文件的时候就很少了?
开?#8594;q行:sfc.exe /purgecache
然后回R卛_,可节省百兆?
假如担心的话Q可不执行,此做法只会节省空_而不是加速?
4、开?#8594;q行: services.mscq入XP自带服务修改列表
在列表每个服务的属性里可?关闭","手动","自动"?
alerter -错误警报器?(可关?
application layer gateway service -l与W三者网l共?防火墙支持的服务Q有些防火墙/|络׃n软g需要。占??mb内存?(可关?
application management-用于讑֮Q发布和删除软g服务?
automatic updates -windows自动更新?可关?
background intelligent transfer service - q个服务原是用来实现http1.1服务器之间的信息传输Q微软称支持windows更新时断点箋?
clipbook - 用与局域网电脑来共?_脓/剪脓的内宏V?可关?
com+Event system -一?COM+ 软g需要?查你?c:program filesComPlus Applications 目录Q没东西可以把这个服务关?
COM+Event system application -同上 (可关?
COmputer browser -用来览局域网电脑的服务,但关了也不媄响浏?(可关?
cryptographic services -windows更新时用来确认windows 文g指纹的,我更新时才开启一下?(可关?
DHCP client-静态IP者需?xDSL {??
Distributed link tracking client-用于局域网更新q接信息Q比如在电脑A有个文gQ在B做了个连接,如果文gUd了,q个服务会更新信息。占?兆内存?(可关?
Distributed Transaction coordinator-无聊的东ѝ?(可关?
DNS Client-DNS解析服务?可关?
Error reporting service -错误报告器,把windows中错误报告给微Y?可关?
Event Log- pȝ日志U录服务Q很有用于查扄l毛?
Fast user switching compatibility-多用户快速切换服务?可关?
help and support -帮助?可关?
Human interface device access-支持"弱智"电脑配g的。比如键盘上调音量的按钮{等?可关?
IMAPI CD-burning COM service -xpȝ服务Q用软g׃用了。占?.6兆内?(可关?
Indexing service -恐怖的xp减?#8230;…(可关?
Internet Connection Firewall(ICF)……-xp防火墙?不用的话可关?
IPSEC Services-大众用户q边都沾不上?(可关?
Logical Disk manager -盘理服务。需要时它会通知你,所以一般关?(可关?
Logical Disk manager administrative service-同上?(可关?
messenger -不是msnQ不惌骚扰的话关。注:妖刺是利用q个?(可关?
MS software shadow copy provider-无用Q据说是备䆾用的。但……没用?(可关?
Net Logon-登陆Domain Controller用的?可关?
Netmeeting remote desktop sharing-用netmeeting实现电脑׃n?可关?
Network Connections - 上网/局域网要用的?
Network DDE -和clipbook一L的?可关?
Network DDE DSDM -同上 (可关?
Network Location Awareness-如有|络׃n或ICS/ICF可能需要?服务器端) (可关?
NT LM Security support provider-telnet 服务用的?可关?
NVIDIA Driver Helper service -nvidia 昑֍帮助?可关?
PDEngine - perfectdisk 引擎
PDScheduler -perfectdisk 计划服务
PerFORMance logs and alerts-记录机器q行状况而且定时写入日志或发警告Q内容可能过于专业,所以自己决定?
Plug and Play- 自动查测新装gQ即插即用?
Portable media serial number-l对无用?(可关?
Print Spooler -打印机用的?(无打印机可关?
Protected Storage-储存本地密码和网上服务密码的服务Q包括填表时?自动完成"功能?
QoS RSVP -据说是降低网?0%……(可关?
Remote access auto connection manager-宽带/|络׃n?
Remote desktop help session manager-q程帮助服务Q占?兆内存?(可关?
Remote Procedure Call (RPC) -pȝ核心服务?
Remote Procedure Call LOCATOR-q个倒没什么用Q管理 RPC 数据库服务,占用1兆内存?(可关?
remote registry -q程注册表运?修改。微软的漏洞……(可关?
removable storage -一般情况下不用Q磁带备份用的?(可关?
routing and remote access-不知者关Q我也不知?(可关?
secondary logon-l与administrator 以外的用户分配指定操作权.(可关?
security accounts manager-?Protected Storage, IIS Admin 才需要?
server -局域网文g/打印׃n需要的?(不打印者可关闭)
shell hardware detection-l有些配|自动启动,像内存棒Q和有些cd驱动{?
smart card -?.4兆内存呢(可关?
smart card helper -兟?可关?
SSDP Discovery service-没有什么硬件利用这个服务?可关?
system event notification-记录用户d/注销/重v/x信息?可关?
system restore service -pȝq原服务Q吃资源和内存的怪兽。虽然有时用刎ͼ自己军_?(可关?
task scheduler-windows 计划服务?可关?
TCP/IP NetBIOS helper-如果你的|络不用Netbios 或WINS的话?可关?
Telephony - 拨号服务Q如果你的宽带不用拨P那么关了它?
telnet -q是微Y的漏z。这根dos中的telnet命o没关pR?兆内存?可关?
terminal services-实现q程d本地电脑Q快速用户切换和q程桌面功能需要,不用q些功能关了吧?可关?
themes -XP的主题。关闭后是XP的经兔R根{?可关?
uninterruptible power supply-停电保护讑֤用的?可关?
universal plug and play device host-同SSDP Discovery Service?可关?
upload manager-用来实现服务器和客户端输送文件的服务Q简单文件传输不需要这个?可关?
volume shadow copy-同MS Software Shadow Copy ProviderQ无用?可关?
webclient-可能和以后的.net技术有联系?可关?
Windows Audio - 控制着你听到的声音?喜欢无声者可关闭)
Windows Installer -windows的MSI安装服务?设成手动)
windows image acquisition (WIA) -有些数码相机和扫描器用的Q觉得没用?可关?
Windows Management Instrumentation - 重要的服务,关了会出现奇怪的问题
]]>
Test.class.getClassLoader().getResource("")
ClassLoader.getSystemResource("")
Test.class.getResource("")
Test.class.getResource("/")
new File("/").getAbsolutePath()
System.getProperty("user.dir")
关于Classloader详见http://www.aygfsteel.com/lengxinCEO/archive/2007/12/07/166055.html