如何执行.jar包中的main方法

时间:2022-05-05 11:51:12

set jre_home=C:/Program" "Files/Avid/AvidMI/jre
set path=C:/Program Files/Avid/AvidMI/bin

"%jre_home%/bin/java"  -Djava.security.policy=C:/Program" "Files/Avid/AvidMI/state/config/security.policy -Djava.util.logging.manager=com.avid.workgroup.diagnostics.logging.AvidLogManager -Dcom.avid.workgroup.statedir=C:/Program" "Files/Avid/AvidMI/state -cp cmui.jar;wgframework.jar;avidplaf.jar;commons-lang-2.4.jar;jini-core.jar;jini-ext.jar;sun-util.jar;tools.jar;ummds.jar; com.avid.ummd.test.client  testfile activetest 1 60000 autoconf C:/IMP/test/testfile.txt

pause

 

 

“-Djava.security.policy=C:/Program" "Files/Avid/AvidMI/state/config/security.policy -Djava.util.logging.manager=com.avid.workgroup.diagnostics.logging.AvidLogManager -Dcom.avid.workgroup.statedir=C:/Program" "Files/Avid/AvidMI/state

此种语法用于设置程序运行时必要的环境参数

 

“ -cp”

运行main函数的命令

 

“cmui.jar;wgframework.jar;avidplaf.jar;commons-lang-2.4.jar;jini-core.jar;jini-ext.jar;sun-util.jar;tools.jar;ummds.jar;”

运行函数所引用的所有jar包

 

“com.avid.ummd.test.client ”

要运行的main函数所在的类,该类存在于ummds.jar包中

 

“ testfile activetest 1 60000 autoconf C:/IMP/test/testfile.txt”

传入main的参数

 

 

参考(摘自其他资料)

 (1)It wasn′t the rmiregistry property (works without any parameters). There were two errors in my codebase VM-Parameter:

-cp C:/ProjX/server/serverProj/bin/usermanager/
-Djava.rmi.server.codebase=file://C:/ProjX/server/serverProj/bin/usermanager/
-Djava.rmi.server.hostname=XYZ (anonymized)
-Djava.security.policy=server.policy
... should instead look like this:

-Djava.rmi.server.codebase=file:/C:/ProjX/server/serverProj/bin/
-Djava.rmi.server.hostname=XYZ (anonymized)
-Djava.security.policy=server.policy

 

(2) 原因很简单,RMI Server/Client程序试图通过Socket连接访问本机的rmiregistry服务(即RMI的Naming Service,其运行的默认端口是1099)。要解决这个问题,可以在运行Server/Client时指定一个Policy文件。在我的机上命令如下(engine.ComputeEngine为要运行的Server class文件):


        D:/My_Projects/Eclipse/RMI_ComputEngine/bin>java -Djava.security.policy=server.policy engine.ComputeEngine
     

        这种方法在网上早已被N个人提出过,但其实关键并不在方法本身,本是那个policy文件。Java Tutorial中对policy文件写法的介绍是这样的:

grant codeBase "file:/home/ann/src/" {
    permission java.security.AllPermission;
};
          但事实上这种写法有一点点小问题,就是在permission java.security.AllPermission后漏了两个双括号,即" " , " "。别看少这两个双括号,我就是因为忽略了它们想了两天都不得其解。正确的policy文件应该是如下所示:
       grant codeBase "file:/home/ann/src/" {
               permission java.security.AllPermission " ", " " ;
        };
  

        其中第一个双括号用来指定被grant permission的电脑URL及端口号范围,例如 "localhost:1024-",而第二个双括号则指定被grant的操作,例如 " accept , connect, listen, resolve " 等。两个都双括号内都只有一个空格则说明指定为本地主机的所有端口及所有可以grant的操作,这是最方便的。


        经过我无数次严格的测试,这是我所了解的解决access denied最简单的方法,期待有高手介绍更好的方法,呵呵。