繁体   English   中英

从 windows 命令行运行 Java

[英]Running Java from the windows command line

我最近问了一个关于 java 程序的问题,我找不到起点,并被告知要查看启动它的 bat 文件,但我不明白它在说什么。

该程序在 tomcat 服务器上运行,并且必须在 .jsp 页面运行之前运行,因此它们不是起点。

任何人都可以解释这意味着什么以及程序从哪里开始,以便我可以逐步完成。

D:\foo_development\server>java -Xmx256M -Djava.library.path=lib -Djava.rmi.serv
er.hostname=192.168.0.104 -Djava.rmi.server.codebase="file:/D:\foo_development\
server\foo_server.jar http://192.168.0.104:8000/foo_client_stubs/server_keycon
sole_stubs.jar" -Djava.security.policy=conf/java.policy -jar foo_server.jar 109
8 2001

这正是我单击 run.bat 后它在 cmd window 中的显示方式

我们来分析一下命令行:

  • java :可执行文件
  • -Xmx256M : 使用多少 memory
  • -Djava.library.path=lib在哪里可以找到本地库(用于 JNI)
  • -Djava.rmi.server.hostname=192.168.0.104 -Djava.rmi.server.codebase="file:/D:\foo_development\ server\foo_server.jar http://192.168.0.104:8000/foo _client_stubs/server_keycon sole_stubs.jar" RMI 相关的东西
  • -Djava.security.policy=conf/java.policy使用哪个安全策略
  • -jar foo_server.jar JAR 文件执行! 是多汁的一点!
  • 109 8 2001 arguments 传递给您的main()方法

所以foo_server.jar是被执行的.jar 文件。 检查它的META-INF/MANIFEST.MF是否有以Main-Class:开头的行,这应该会告诉您执行了哪个 class。

D:\foo_development\server>java -Xmx256M -Djava.library.path=lib -Djava.rmi.serv
er.hostname=192.168.0.104 -Djava.rmi.server.codebase="file:/D:\foo_development\
server\foo_server.jar http://192.168.0.104:8000/foo_client_stubs/server_keycon
sole_stubs.jar" -Djava.security.policy=conf/java.policy -jar foo_server.jar 109
8 2001

此命令运行带有 arguments 109,8,201 的 foo_server.jar 文件。 和之前的所有其他 -jar 是 vm arguments 告诉 jvm 关于不同的 memory 大小,如堆内存大小和 aslo 库路径。

对于您的主要 class 您将在 MANIFIST 文件中找到它的条目作为Main-class:-- foo.bar.MainClass

简而言之,你有

java -jar foo_server.jar 

rest 只是配置和 arguments。

在 foo_server.jar 中会有一个 MANIFEST.MF 文件,其中包含如下行

Main-Class: com.mycompany.foo.FooMain

这是 class 在加载时调用main(String[])的地方。

查看命令:

  • java是要运行的可执行文件( java.exe ,在路径上找到)
  • -Xmx256M指定最大堆大小为 256 MB
  • -D (多次)定义各种Java系统属性
  • -jar表示“加载给定的 jar 文件,并从其清单中Main-Class属性指定的 class 开始
  • foo_server.jar是要加载的 jar 文件
  • 1098 2001是命令行 arguments 到main (所以args将是一个包含元素“1098”和“2001”的数组

关键部分是选项-jar foo_server.jar 这告诉 JRE 打开名为 JAR 的文件,从其元数据中读取Main-Class属性(在存档的META-INF/MANIFEST.MF中)并执行该属性(从其 static main方法开始,正常)。

jar 的主要 class 可以在此 jar 的清单中指定。 @见 http://download.oracle.com/javase/tutorial/deployment/jar/appman.html

在您的情况下,它是foo_server.jar 这个 jar(一个 jar 它只是一个 zip)必须有一个META-INF文件夹,清单所在的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM