how to pass jvm arguments in maven command line

For example instead of writing : Indeed, myApp.fooArg=123 will be stored in the last element of the String[] args of the main() method of the Spring Boot application startup class (the class annotated with @SpringBootApplication). can be used to supply additional options to it. Deploy an Application in a Managed Domain Using Maven, 7.5. @KevinBoone I want to pass variables to my own program at runtime and yes, its a maven project. settings could be defined with the value -Xms256m -Xmx512m. Java has a lot of J-acronyms, including JVM, JDK, and JRE. About Subsystems, Extensions, and Profiles, 3.2.2. Applying JVM Settings to an Individual Server, 9.4. Microsoft ISAPI Connector", Expand section "22.10. On command line use commas to separate multiple profiles.User property is:spring-boot.run.profiles.If you set a single active profile, this way doesnt have a great value as it reduces just a little the arguments to pass but it also creates a variation in the way to pass arguments. It doesn't target an actual machine. To learn more, see our tips on writing great answers. mvn spring-boot:run -Dspring-boot.run.profiles=test -Dspring-boot.run.arguments=--server.port=8085. For example, to set a different heap size, you can use the following command: After applying the above command, the server group groupA will inherit the JVM settings from production_jvm, except for the heap size which has an overridden value of 1024m. By Suspend and Shut Down JBoss EAP Gracefully, 2.5. Increase visibility into IT operations to detect and resolve technical issues before they impact your business. JBoss EAP Class Loading", Collapse section "6. Specify other tasks to execute before launching this run configuration. Thespring-boot-maven-plugin in Spring Boot 2 (as in Spring Boot 1.4+ but with a different Maven use property) allows to set specificallythe active profiles. Java is open source, so different companies build and distribute JDKs. If you do not run the dsjavaproperties command, the The following management CLI commands demonstrate creating a server group name groupA that uses the production_jvm JVM settings that were shown in the previous example. Oracle NSAPI Connector", Red Hat JBoss Enterprise Application Platform, Red Hat Advanced Cluster Security for Kubernetes, Red Hat Advanced Cluster Management for Kubernetes, 2.3. Configuring JBoss EAP as a Front-end Load Balancer", Collapse section "22.4. And here the spring-boot-maven-plugin defines it as : spring-boot.run.arguments. Deploying Applications Using Maven", Expand section "7.5. The Apache Software Foundation, Recommended Best Practice - Using a Repository Manager. You can choose between the default IntelliJ IDEA coverage engine and JaCoCo. different Java arguments (and a different JVM) depending on whether the command is Configuring HTTP/2", Expand section "17.12. NOTICE starting with Maven 3.9.0 each single argument must be put in new line, so for the mentioned example your file will have content like: Starting with Maven 3.3.1+ you can define JVM configuration via ${maven.projectBasedir}/.mvn/jvm.config file which means you can define the options for your build on a per project base. Deploy and Configure the Generic JMS Resource Adapter, 17. So you can define an ${maven.projectBasedir}/.mvn/extensions.xml file which looks like the following: Now you can simply use an extension by defining the usual maven coordinates groupId, artifactId, version as any other artifact. The nature of simulating nature: A Q&A with IBM Quantum researcher Dr. Jamie We've added a "Necessary cookies only" option to the cookie consent popup. For example, to set a different heap size, you can use the following command: You can also edit server JVM settings in the JBoss EAP management console by selecting the Runtime tab, selecting Hosts, selecting the relevant host. Configuring a Local Outbound Connection, 21.3. the line that starts with import-ldif.offline in the java.properties file, as follows: import-ldif.offline.java-home=/usr/jdk1.6. E.g. In this case, add the following options to the VM options field: -Dcom.sun.management.jmxremote.port={some_port}, -Dcom.sun.management.jmxremote.authenticate=false. The Spring Boot run configuration defines how to run your Spring Boot application in IntelliJIDEA. Install a JDBC Driver as a JAR Deployment, 13.13.4. Activate the console when the application writes to the standard output stream. Standalone Server Configuration Files, 3.5.2. I have one server that can read properties files for multiple environments and right now, they are passed as a -D option in jvm.options. .css-1mwkkc{margin-left:1em;}.css-150r5bc{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;padding:0.5rem 1rem;font-size:0.875rem;font-weight:400;border-radius:3px;font-family:var(--primary-font-family);line-height:1;cursor:pointer;border:1px solid transparent;transition-duration:0.15s;transition-property:color,background;transition-timing-function:ease-out;white-space:nowrap;-webkit-text-decoration:none;text-decoration:none;color:var(--button-outline-color);border:1px solid var(--button-outline-color);background-color:transparent;font-size:0.75rem;margin-left:1em;}.css-u7ytkp{margin-right:0.5rem;}.css-1bnfg05{fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;margin-right:0.5rem;}.css-668d8b{width:1em;height:1em;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;margin-right:0.5rem;}Create issue. Interpreter: It reads bytecode instructions and executes them one at a time. Saw another example using the file JVMARGS (no extension) which holds following values. Can airtags be tracked from an iMac desktop, with no iPhone? PC Registers: The PC Registers store the current program counter value. Configuring the Naming Subsystem", Expand section "22. If I would also the argument to be added in the Spring environment, this should do the job : --myApp.fooArg=123. Starting with Maven 3.3.1+, this can be solved by Configuring Transactions", Expand section "14.1. Configuring JVM Settings for a Standalone Server, 9.2. And as you run the application from the uber-jar (standalone jar),the ways that you used with Maven or Gradle dont work : you have to use another syntax. garbage collection runs. Set Up a Managed Domain on a Single Machine, 8.5.2. database (DB) cache (or caches if more than one). The following table summarizes the Java options that can have an impact on options to a script but this can now simple being done by defining ${maven.projectBasedir}/.mvn/maven.config file which contains the Details : - spring-boot.run.profiles The spring profiles to activate. Making statements based on opinion; back them up with references or personal experience. Maven has a gazillion ways to run Java code, through various plug-ins -- and they don't all use the same methods to pass JVM command-line switches to the running program. For more information, see Spring Boot: Profiles. In a JBoss EAP managed domain, you can define JVM settings at multiple levels. Have a great weekend! By default, the directory server selects a 32-bit JVM regardless Do I need a thermal expansion tank if I already have a pressure tank? Full example here - Chris Ritchie May 25, 2015 at 15:09 Configuring a Remote Outbound Connection, 18.7. Why is this sentence from The Great Gatsby grammatical? Specify classes and packages to exclude from coverage data. You can select to launch another run configuration, open some URL in a web browser, run an external tool, and so on. Vous pouvez le mettre en favoris avec ce permalien . option was to give the path to the jar on command line via mvn -Dmaven.ext.class.path=extension.jar. Is Java "pass-by-reference" or "pass-by-value"? Configuring JVM Settings for a Managed Domain, 9.2.1. Non-standard options start with -X . What is the correct way to screw wall and ceiling drywalls? Which JVM is IntelliJ using? Selects the CMS How do I convert a String to an int in Java? Configuring HTTP-Only Session Management Cookies, 17.11.1. Specify what to do when you modify the code and want to update the running application: Do nothing: Do not update the application. Selects server application runtime optimizations. Staging Ground Beta 1 Recap, and Reviewers needed for Beta 2. @argfile (Java 9+): Pass the classpath via a temporary Java command-line argument file. If something goes wrong in an application you've written, both the developer and end-user have options to debug the problem. Managed Domain Configuration Files, 3.8.2. JVM to inadvertently promote short-lived objects into the old generation. Configure the ISAPI Connector to Balance Client Requests Across Multiple JBoss EAP Servers, 22.10.1. This has the drawback giving those IntelliJIDEA uses the local JMX connector for retrieving the data of the Spring Boot actuator endpoints. The following options are specific to running Spring Boot applications: Specify which Spring profiles should be active. Transactions Subsystem Configuration, 14.1.1. memory available can improve performance, but increasing it to too high a value All JVM implementations support standard options. When you write source code, you're writing code for humans to read. By default, IntelliJIDEA uses the project root as the working directory. E.g. I need the following vm options to be passed into maven. ./gradlew test -Dmy_var=xyz. Set the server instances to run in the 64-bit JVM. of the architecture. Management Interfaces", Collapse section "3.5. Method Area: The Method Area stores class-level data, such as field and method information, static variables, and constant pool. Configure a JBoss EAP 7 Domain Controller to Administer JBoss EAP 6 Instances, 9.1. contain project specific configuration for running Maven. Deploying Applications Using the HTTP API", Expand section "7.6. I'd like to do run my tests using command line (from CI server) and pass the value of env var. RPM Service Configuration Properties, A.19. You can also click Select alternative JRE to manually specify the path to a runtime that the IDE failed to detect. For example: In the production environment, you might find a deployed application needs a performance boost. To list the JDKs on your Linux system, you can use the alternatives command: To switch between available JDKs, run the command again: Another option is to use SDKMan, which helps you download, update, and manage the JDKs on your system. Using an External Web Server as a Proxy Server, 22.5.3. For logs in the table, you can configure the following options: Is Active: Display the specified log file. To display the JVM status for a JBoss EAP server in a managed domain: Select the Runtime tab, and then select the server group and server that you want to view. Maven has a gazillion ways to run Java code, through various plug-ins -- and they don't all use the same methods to pass JVM command-line switches to the running program. So on Linux, to run a program under Maven with a specific -Xmx setting I might do. The ${maven.projectBasedir}/.mvn/maven.config is located in the ${maven.projectBasedir}/.mvn/ directory; also works if in the root of a multi module build. In the same dialog, add the MAVEN_OPTS environment variable in the user variables to specify JVM properties, e.g. A note on advertising: Opensource.com does not sell advertising on the site or in any of its newsletters. Disable Advertising for mod_cluster, 22.6.3. The Java properties file has the following format. Accessing Command-Line Arguments in Java Since the main method is the entry point of a Java application, the JVM passes the command-line arguments through its arguments. If you want to pass to your own application at runtime it make no sense to put those things into the build process. Browse other questions tagged, Where developers & technologists share private knowledge with coworkers, Reach developers & technologists worldwide. You can keep it enabled for development environments but disable it for production runs. Java Connector Architecture (JCA) Management, 16.1. You can install more than one on your system, which can be helpful when you're working on or using different Java projects, some of which might use an old JDK. How do I generate random integers within a specific range in Java? Specify the names and values of environment variables that are necessary when running this configuration. in the java.properties file, as follows: export-ldif.online.java-args=-Xms256m -Xmx256m. To inherit the systemProperties collection from the parent configuration, you will need to specify combine.children="append" on the systemProperties node in the child pom: Some system properties must be set on the command line of the forked VM, and cannot be set after the VM has been started. A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform. For more information, see View logs. In fact the -- prefix matters for Spring because Spring converts any command line option arguments starting with -- to a property and adds them to the Spring Environment. There are three types of class loaders: Runtime Data Area: The Runtime Data Area is where the JVM stores data during program execution. Configuring Log Handlers", Collapse section "12.5. than -client mode, at the expense of slightly longer startup times. Deploy an Application in a Managed Domain Using the Management CLI, 7.2. For example, as you run from the source code (Maven or Gradle), you have to use a specific way . To list these options: These extra options are subject to change without notice and are not supported by all JVM implementations. auto - Automatically detect the command-line length and determine whether to shorten the command line via an appropriate approach. Configure Undertow as a Static Load Balancer, 22.5. This garbage collector Define a Custom Directory for Deployment Content, 8.3.4. argfile - Generate the classpath parameters to a temporary argument file, and launch the program with the command line 'java @argfile {args}'. An example of setting the JAVA_OPTS environment variable on Linux is shown below. By default, server groups and individual servers will inherit the JVM settings from their parent, but you can choose to override JVM settings at each level. Create the Spring Boot run configuration From the main menu, select Run | Edit Configurations. How can this new ban on drag possibly be considered constitutional? However, it is impossible to get the local JMX connector address if the Spring Boot application and the JVM have different bitness and you are using OpenJ9 JDK. Select a method that will be used to shorten the command line if it exceeds the limitation of your OS. Most people don't need to think or even know about the JVM, but it can be useful to understand how the JVM works so you can debug and optimize Java code. So you only have to call Maven just by using mvn clean package instead of mvn -T3 -U --fail-at-end clean package and not to miss the -T3 -U --fail-at-end options on every call. *, which are located in the jre/lib/rt.jar file. Thanks for contributing an answer to Stack Overflow! Click to add a new log. Red Hat and the Red Hat logo are trademarks of Red Hat, Inc., registered in the United States and other countries. Oracle NSAPI Connector", Collapse section "22.10. The JVM is responsible for executing Java bytecode instructions, managing memory, and providing a secure runtime environment. System properties must be configured in JAVA_OPTS to be used by JBoss EAP modules (such as the logging manager) during startup. Spring Boot by default loads properties from application.properties. Located within the project's top level directory, the files maven.config, jvm.config, and extensions.xml Passing jvm arguments from Maven/Gradle We need to specify the property -Dspring-boot.run.jvmArguments with arguments such as : -Dspring-boot.run.jvmArguments="-Xms512m -Xmx2048m -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5000" Ce contenu a t publi dans Non class. Specify a file to save the console output of your application. For an IDE on Windows, you might need to use the Control Panel to do this. maven fails to recognize jetty is installed, running war from command line without maven jetty. For example things like -T3 -U --fail-at-end. For example, if you override the value of the spring.config.name property with my.config, IntelliJIDEA will pass -Dspring.config.name=my.config on the command line when running this Spring Boot application. In order to pass JVM arguments and properties to Mule, you can use either of the following approaches: Add new wrapper.java.additional.N entry into the wrapper.conf file (where N=the associated property number) Use the -M command line argument Note: this will set the system property for all Mule applications deployed in that Mule runtime. the trailing whitespaces matter. There are two ways to add a list of system properties to Surefire: This configuration is the replacement of the deprecated systemProperties. The following options are related to logging the execution of your Spring Boot application. Configure JBoss EAP to Communicate with mod_jk, 22.8.1. The mod_cluster HTTP Connector", Collapse section "22.6. TL-DR:Advantage : uniform way and allow to pass any arguments Before You Install Oracle Unified Directory 11g Release 1 (11.1.1), 6. About Server Logging", Expand section "12.3. Cliquez ici pour savoir comment activer JavaScript dans votre navigateur. For more information, see Spring Boot: Logging. About Application Logging", Expand section "13. applications from forcing expensive garbage collections. Partner is not responding when their writing is needed in European project application, How do you get out of a corner when plotting yourself into a corner. Configure a Periodic Size Rotating Log Handler, 12.7.1. So for example if you put the following JVM options into the ${maven.projectBasedir}/.mvn/jvm.config file. Configuring JVM Settings", Expand section "9.2. These options start with -XX. This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply. Not the answer you're looking for? Add -d64 as a JVM option in your appropriate JVM configuration. What video game is Charlie playing in Poker Face S01E07? If we execute now : mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8085,myApp.fooArg=123 Microsoft ISAPI Connector", Collapse section "22.9. It can accept any value from Maven's properties that can be converted to a String value. rev2023.3.3.43278. Command line arguments are passed to the main() method of the Java program as an array of strings. For certain commands (import-ldif, export-ldif, backup, and restore) you can also specify Spring Boot - Different Ways To Pass Application Properties. It consists of several components, including the Method Area, Heap Area, Stack Area, and PC Registers. Creating Datasources", Expand section "13.4. Starting and Stopping JBoss EAP (RPM Installation), 2.5.1. A place where magic is studied and practiced? Configuring Batch Applications", Collapse section "20. Using System Properties Using System Properties There are two ways to add a list of system properties to Surefire: systemPropertyVariables This configuration is the replacement of the deprecated systemProperties. It targets something called the Java Virtual Machine (JVM), and so it can run on any machine. So no need to create a shaded artifact anymore. JAR manifest: Pass the classpath via a temporary classpath.jar file. Besides running it locally, you can select to run your application on a remote machine via SSH or in a Docker container. mkdir /path/to/project/.mvn Maven.config Inside of the .mvn directory, create a new file named maven.config. So the short answer, I guess, is that you need to find exactly which execution plug-in you're using in Maven, and look at the documentation for that plug-in to see how to configure it to use the appropriate JVM settings. Deploy an Application to a Standalone Server Using the Deployment Scanner, 7.3.3. A Java Developer Kit (JDK) is accessed by programmers who need development libraries to use in their code. Tuning a JVM is the process of adjusting JVM parameters to improve the performance of the Java application. I pass two arguments that Spring will add in the Spring environment. These comments are closed, however you can, A guide to JVM parameters for Java developers. To access command line arguments in Java, you can use the args parameter in the main() method. What is a word for the arcane equivalent of a monastery? Configure a Size Rotating Log Handler, 12.5.5. Or your IDE might provide a way to set the environment variable when it runs Maven -- that depends on the IDE. Disable the JMX agent that shows the application endpoints data in the Actuator tab of the Run tool window. Let's take a closer look at each of these components: Class Loader Subsystem: Bootstrap Class Loader: It loads the core Java classes, such as java.lang. mvn spring-boot:run -Dspring-boot.run.arguments=--logging.config=file:./logback-spring.xml,--server.port=8085, myApp.fooArg=123 Starting JBoss EAP (RPM Installation), 2.5.2. So given the example below: The string ${project.build.outputDirectory} will be passed on literally because the type of that expression is a File, not a String. This may be useful if you are only changing the resources, not the source code of your application. In this tutorial we will see what are additional ways to pass application properties. Deploying Applications Using the HTTP API", Collapse section "7.5. Configure mod_cluster in Apache HTTP Server, 22.6.2. VM crash or System.exit called, Maven spring boot run debug with arguments, Specifying Maven memory parameter without setting MAVEN_OPTS environment variable, How to set up Java VM to use the root certificates (truststore) handled by Mac OS X, Setting properties via Maven command line, How to run junit tests by maven in terminal with JVM arguments, Maven and properties for slf4j simplelogger, Supply JVM args to command line "mvn scala:run", How do I deploy multiple peer webapps from a parent pom, run integration tests from maven failsafe plugin for a profile when I set a parameter from command line such as -DrunIT=true, How to Run jetty on different maven profile, Spring loaded with maven jetty:run and eclipse, java.lang.NoSuchMethodError Ant/Maven failing via command line. Add the MAVEN_OPTS environment variable to specify JVM properties, e.g. Configuration Data", Collapse section "3.6. Right click on the Project Root in Studio, select Run As > Run Configuration > Argument tab > Select test case and append the arguments in the VM arguments window, like the example below: Arguments tab / VM Arguments tab: -Dmule.encoding=ISO-8859-1 -Dmule.env=dev -Dmule.key=123456 -Dmule.AnyKey= value For Running Mule as Maven application Configure Oracle iPlanet Web Server to use the NSAPI Connector, 22.10.2. Log File Location: Specify the path to the log file or an Ant pattern. Therefore, the initial and maximum sizes should be set to For example, by default IntelliJIDEA compiles the code before running the application. On the other hand, the JVM is the runtime environment for Java bytecode that is responsible for executing Java programs on different platforms. Deploy an Application to a Standalone Server Using Maven, 7.4.2. 64-bit machines only. Configuring Log Formatters", Collapse section "12.7. Desired Outcome: Stability is more important than performance in the long run. The configuration for Apache Maven usage itself and projects built with resides Suppose a SpringBoot bootstrap class as : According to how the argument are passed (prefixed by -- or not), the behavior will differ. The configuration Full example. About Managed Domains", Expand section "8.3. Deploying Applications Using the HTTP API, 7.5.1. By default, this option is disabled, and IntelliJIDEA stores run configuration settings in .idea/workspace.xml. Configuring Log Formatters", Expand section "12.8. I'll do my best to provide you with helpful answers. We'll also look at how we can set those values using the Maven plugin. specified in this file is taken into account each time the dsjavaproperties The default is 32-bit if neither option is indicated. Understanding how the JVM works can help Java developers optimize their programs for performance and memory usage. In the Monitor column, select JVM and click View . Apache mod_proxy HTTP Connector", Collapse section "22.8. Configure the NSAPI Connector to Send Client Requests to JBoss EAP, 22.10.3. How to follow the signal when reading the schematic? The same setting can be used in a Microsoft Windows environment: Alternatively, JVM settings can be added to the standalone.conf file in the EAP_HOME/bin folder, which contains examples of options to pass to the JVM. The args parameter in the main() method allows Java programs to access the command line arguments as an array of strings. and maximum memory sizes available to the JVM, respectively. But it seems that Cucumber either tries deliberately to mislead me, or that their documentation is incomprehensible to me. You can also create and edit JVM settings in the JBoss EAP management console by selecting the Runtime tab, selecting Hosts, and clicking JVM on the host you want to edit. To solve such a problem, you might use the debug option -XX:+HeapDumpOnOutOfMemoryError, which creates a .hprof file with debug information. Using an External Web Server as a Proxy Server", Collapse section "22.5. Starting and Stopping JBoss EAP", Collapse section "2. Deploying Applications Using the Deployment Scanner", Collapse section "7.3. But note that you'd need to set MAVEN_OPTS in a way that is appropriate for your platform. Configuring Undertow to use HTTP/2, 17.12. About the Logging Subsystem", Expand section "12.5. Garbage Collector: It manages the Heap Area and frees memory used by objects that are no longer in use. We are going to cover some of the important options as stated here. The next time you're working with Java, take a moment to look at the options available to you. On the JVM Options page, select Add JVM Option. Specifying 32 or 64-bit JVM Architecture, 12.1.5. In general, it's important to consider these points before tuning: Cost : Sometimes, improving the hardware running your code can improve an application's performance. This file will become part of your project and will be checked in along with your project. Maven Jetty plugin - how to control VM arguments? However, Java is different. Configuring a RequestDumping Handler", Expand section "18. This is a system environment variable, not a Java environment variable. Underlying issues : Sometimes, the issue could be an underlying issue with the host operating system. Application Class Loader: It loads the classes specified by the CLASSPATH environment variable or the -classpath command-line option. the arguments are separated by a comma character. Hot swap classes and update trigger file if failed: This is similar to Update classes and resources followed by Update trigger file. Set the host and process controllers to run in the 64-bit JVM. JVM parameters are grouped under three categories: Standard options, Non-standard, and Advanced. To get detailed JVM version information, use the following option: These options are not for casual use and are used for tuning the specific areas of the Hotspot VM. For example to specify the location of the logging configuration file, the server port and a custom argument, we could run : Sometimes, an application requires more memory to perform as desired, and no amount of software hacking will change that. none: Do not shorten the command line. Configure Undertow as a Load Balancer Using mod_cluster, 22.4.2. Launching a Managed Domain", Expand section "8.5. Configure the ISAPI Connector to Send Client Requests to JBoss EAP, 22.9.3. This options should be specified when a large JVM heap JBoss EAP comes with a default JVM setting, but the following management CLI command demonstrates creating a new JVM setting named production_jvm with some custom JVM settings and options. server performance. Java source code gets compiled into bytecode which is run by a JVM installed on a computer. Configuring Resource Adapters", Expand section "17. JVM heaps greater than 4 Gbytes require a 64-bit JVM. Applying JVM Settings to a Server Group, 9.2.3. Configure mod_proxy in Apache HTTP Server, 22.8.2. Configuration of Java Virtual Machine (JVM) settings is different for a standalone JBoss EAP server, or a JBoss EAP server in a managed domain. Skip Content: Do not display old log messages from previous runs. Customizing Deployment Behavior", Expand section "8.1. MAVEN_ARGS environment variable: Starting with Maven 3.9.0, this variable contains arguments passed to Maven before CLI arguments. Make sure that the value set as the maximum heap size does not exceed your system memory of the machine that runs Maven. How to add local jar files to a Maven project? Configuring Log Handlers", Expand section "12.7. If several files of a rolling log match the pattern, IntelliJIDEA will display the most recent one. Deploy and Configure the Websphere MQ Resource Adapter, 16.4.4. a different JVM is specified for a particular utility. This passes -Dspring.profiles.active on the command line, which overrides the spring.profiles.active property. 2. Not very convenient as well.

Hodedah 7 Drawer Dresser Instructions, Can You Get Sharpness From A Villager, Articles H

how to pass jvm arguments in maven command line