了解java命令行

问题描述 投票:0回答:3

有人可以帮我理解下面的 java cmd 行在做什么(分解以便更容易阅读)吗?我在我们的 AV 中发现了这个,但不知道这个 cmd 的整体作用。

从我的谷歌搜索中,我发现对于

-DACTIVE=true
-D
设置了系统属性值。在这种情况下,我的理解是将
ACTIVE
值设置为
true
..?

我也明白

-classpath
在指定目录中搜索类文件。

不幸的是

com.zerog.lax.LAX 
,我找不到它的作用/是什么。感谢任何帮助。

    "C:\Users\user\AppData\Local\Temp\I1644615473\Windows\resource\jre\bin\java.exe" -DACTIVE=true 
    
    -classpath "C:\Users\user\AppData\Local\Temp\I1644615473\InstallerData\IAClasses.zip;
    
    C:\Users\user\AppData\Local\Temp\I1644615473\InstallerData\Execute.zip;
    
    C:\Users\user\AppData\Local\Temp\I1644615473\Windows\InstallerData\Execute.zip;

C:\Users\user\AppData\Local\Temp\I1644615473\InstallerData\Resource1.zip;
    
    C:\Users\user\AppData\Local\Temp\I1644615473\Windows\InstallerData\Resource1.zip;
    
    C:\Users\user\AppData\Local\Temp\I1644615473\InstallerData;
    
    C:\Users\user\AppData\Local\Temp\I1644615473\Windows\InstallerData;" 
    
    com.zerog.lax.LAX 
    
    "C:/Users/user/AppData/Local/Temp/I1644615473/Windows/setup.lax" 
    
    "C:/Users/user/AppData/Local/Temp/laxF375.tmp"
java
3个回答
2
投票

基本上有 4 个部分:

  1. java 命令及其选项(在本例中为 -D,它设置任意“属性”;正在运行的程序可能会需要这个)

  2. 类路径,告诉在哪里可以找到执行所需的所有代码。它是目录和/或 jar 文件的列表。

  3. 要运行的类 - 在本例中是类 com.zerog.lax.LAX,可以在类路径中列出的位置中的某个位置找到它,并且必须包含合适的 main() 方法。

  4. 要传递给 com.zerog.lax.LAX 的 main() 的参数。


1
投票

直接来自

java -help

C:\Users\Hector>java -help
Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)
where options include:
    -d32          use a 32-bit data model if available
    -d64          use a 64-bit data model if available
    -server       to select the "server" VM
                  The default VM is server.

    -cp <class search path of directories and zip/jar files>
    -classpath <class search path of directories and zip/jar files>
                  A ; separated list of directories, JAR archives,
                  and ZIP archives to search for class files.
    -D<name>=<value>
                  set a system property
    -verbose:[class|gc|jni]
                  enable verbose output
    -version      print product version and exit
    -version:<value>
                  Warning: this feature is deprecated and will be removed
                  in a future release.
                  require the specified version to run
    -showversion  print product version and continue
    -jre-restrict-search | -no-jre-restrict-search
                  Warning: this feature is deprecated and will be removed
                  in a future release.
                  include/exclude user private JREs in the version search
    -? -help      print this help message
    -X            print help on non-standard options
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  enable assertions with specified granularity
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  disable assertions with specified granularity
    -esa | -enablesystemassertions
                  enable system assertions
    -dsa | -disablesystemassertions
                  disable system assertions
    -agentlib:<libname>[=<options>]
                  load native agent library <libname>, e.g. -agentlib:hprof
                  see also, -agentlib:jdwp=help and -agentlib:hprof=help
    -agentpath:<pathname>[=<options>]
                  load native agent library by full pathname
    -javaagent:<jarpath>[=<options>]
                  load Java programming language agent, see java.lang.instrument
    -splash:<imagepath>
                  show splash screen with specified image
See http://www.oracle.com/technetwork/java/javase/documentation/index.html for more details.

  1. -D<name>=<value>
    设置系统属性。在你的情况下:ACTIVE=true 事情是这样的:如果“ACTIVE”不是已知的系统属性,则必须在某处定义它。对于 Maven 项目,我会在 POM 中设置它们。以下是在 Maven 中执行此操作的方法:https://stackoverflow.com/a/3231981/2851311
  2. -classpath
    -cp
    是指定正在运行的应用程序的类路径的首选方法。为什么这是首选方式?原因很简单,如果您想从多台机器上执行程序,则必须在每台机器上设置类路径,或者只需在命令行指令中使用
    -classpath
    -cp
    选项创建一个脚本,然后您将不必担心目标系统未正确配置以找到正在执行的编译单元。以下是有关使用这些选项的更多信息: https://docs.oracle.com/javase/tutorial/essential/environment/paths.html

此信息对您有什么用处?

当您想从目录执行

java.exe
时,操作系统(OS)必须知道在哪里可以找到这个可执行文件。系统中可能有许多同名的文件。操作系统解决了这个问题。首先,它假设
.exe
文件位于您尝试执行它的同一目录中。然后,如果在那里找不到它,它将按照出现的顺序转到文件系统上类路径集中列出的所有目录,并执行它找到的第一个目录。如果未找到匹配项,则会抛出错误。

您也可以提供

.exe
文件位置的完整路径。这是执行您要使用的
.exe
文件的最可靠方法。

我用这个插图来帮助您理解这与您要启动的程序相同。当你执行类似的事情时

C:\My Directory\> java HelloWorld

操作系统期望编译的单元位于“我的目录”中,或者可以在类路径中的某个位置找到它。 Java 提供了一种机制,使您能够灵活地查找编译单元。这是通过使用

-cp
-classpath
选项来实现的。话虽如此,只有当您的编译单元很简单并且没有任何依赖项和/或编译单元不在 JAR 文件中时,这才有效。

如果您的程序具有依赖项,则同样的概念适用:操作系统必须能够找到这些依赖项,以便在运行时加载它们。如果程序位于 JAR 文件内,则必须直接执行 JAR 而不是编译的(主)类。要执行 JAR,您必须使用

-jar
选项。

java -jar Example.jar

如果您的程序需要参数,您还需要从命令行传递它们。有关此主题的更多信息可以在这里找到:https://www.baeldung.com/java-run-jar-with-arguments


-5
投票

אנשלאנאנמטמטםמטםאנאנאנאנמטמטמטםמטםמטםאנמטםאנאנמטםאנשלשלאנמטמטמטמטמטאנאנמטםאנמטםאנשלשלשלשלשלאנאנאנאנמטמטמטםמטםמטםמטםאנאנאנאנאנאנאנאנאנ集מטםמטםאנשלאנאנמטמטםמטםאנשלשלשלאנאנאנאנמטמטמטםמטםמטםאנאנאנאנאנשלשלשלשל

© www.soinside.com 2019 - 2024. All rights reserved.