{"id":142,"date":"2026-10-12T12:51:54","date_gmt":"2026-10-12T12:51:54","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2009\/06\/20\/access-all-java-system-properties-directly\/"},"modified":"2026-10-12T12:51:54","modified_gmt":"2026-10-12T12:51:54","slug":"access-all-java-system-properties-directly","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/access-all-java-system-properties-directly\/","title":{"rendered":"Apache Ant Properties: Access Java System Properties, Environment Variables, and Runtime Inputs"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>Originally published on 2009-06-20; fully revised and updated.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you use Apache Ant, property expansion via <strong>${name}<\/strong> is the core mechanism for build-time configuration. This guide shows how to read Java system properties directly, import environment variables, pass values with <strong>-D<\/strong>, and use interactive input only where it makes sense.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This revised article expands the original quick tip from <a href=\"https:\/\/www.devopsschool.com\/blog\/access-all-java-system-properties-directly\/\">DevOpsSchool<\/a> into a practical reference.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2009\/06\/java-system-properties.png\" alt=\"Java system properties\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Property sources in Ant at a glance<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In Ant build files, you reference a property as <strong>${property.name}<\/strong>. Values can come from multiple sources during a build run.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Source<\/th><th>Reference style<\/th><th>How it is set<\/th><th>Typical use<\/th><\/tr><\/thead><tbody><tr><td>Java system property<\/td><td><code>${user.home}<\/code><\/td><td>Provided by the JVM running Ant<\/td><td>Runtime and host metadata<\/td><\/tr><tr><td>Environment variable<\/td><td><code>${env.PATH}<\/code><\/td><td>Imported with the Ant property task using an <code>environment<\/code> prefix<\/td><td>OS-level paths and machine config<\/td><\/tr><tr><td>Command-line property<\/td><td><code>${deploy.env}<\/code><\/td><td><code>ant -Ddeploy.env=prod<\/code><\/td><td>CI\/CD and per-run overrides<\/td><\/tr><tr><td>Interactive input<\/td><td><code>${release.version}<\/code><\/td><td>Set with Ant <code>input<\/code> task<\/td><td>Local\/manual runs<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Read Java system properties directly<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You can use common JVM properties directly in your build file without extra setup.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><code>${user.name}<\/code><\/li><li><code>${user.dir}<\/code><\/li><li><code>${user.home}<\/code><\/li><li><code>${java.version}<\/code><\/li><\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">'sys-props-demo'<\/span> <span class=\"hljs-attr\">default<\/span>=<span class=\"hljs-string\">'show-system-props'<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">target<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">'show-system-props'<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">echo<\/span> <span class=\"hljs-attr\">message<\/span>=<span class=\"hljs-string\">'user.name = ${user.name}'<\/span>\/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">echo<\/span> <span class=\"hljs-attr\">message<\/span>=<span class=\"hljs-string\">'user.dir  = ${user.dir}'<\/span>\/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">echo<\/span> <span class=\"hljs-attr\">message<\/span>=<span class=\"hljs-string\">'user.home = ${user.home}'<\/span>\/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">echo<\/span> <span class=\"hljs-attr\">message<\/span>=<span class=\"hljs-string\">'java.version = ${java.version}'<\/span>\/&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">target<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">project<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Import environment variables with a prefix<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To expose OS environment variables in Ant properties, use the <code>property<\/code> task with an environment prefix (for example, <code>env<\/code>). Then reference values as <code>${env.VARIABLE_NAME}<\/code>.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">'env-demo'<\/span> <span class=\"hljs-attr\">default<\/span>=<span class=\"hljs-string\">'show-env'<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">target<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">'show-env'<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">property<\/span> <span class=\"hljs-attr\">environment<\/span>=<span class=\"hljs-string\">'env'<\/span>\/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">echo<\/span> <span class=\"hljs-attr\">message<\/span>=<span class=\"hljs-string\">'PATH = ${env.PATH}'<\/span>\/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">echo<\/span> <span class=\"hljs-attr\">message<\/span>=<span class=\"hljs-string\">'HOME = ${env.HOME}'<\/span>\/&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">echo<\/span> <span class=\"hljs-attr\">message<\/span>=<span class=\"hljs-string\">'USERPROFILE = ${env.USERPROFILE}'<\/span>\/&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">target<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">project<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Pass properties at runtime with -D<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For pipeline-friendly builds, pass values at invocation time so you can reuse the same build file across environments.<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs language-bash\">ant -Ddeploy.env=staging -Dbuild.number=123 package\nant -Ddeploy.env=prod deploy<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Inside <code>build.xml<\/code>, consume those runtime values with normal property syntax.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">target<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">'package'<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">echo<\/span> <span class=\"hljs-attr\">message<\/span>=<span class=\"hljs-string\">'Deploy environment: ${deploy.env}'<\/span>\/&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">echo<\/span> <span class=\"hljs-attr\">message<\/span>=<span class=\"hljs-string\">'Build number: ${build.number}'<\/span>\/&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">target<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Prompt for input during local runs<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ant can prompt for ad hoc input. This is useful for local\/manual execution, but usually unsuitable for non-interactive CI jobs.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">target<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">'ask-version'<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span> <span class=\"hljs-attr\">addproperty<\/span>=<span class=\"hljs-string\">'release.version'<\/span> <span class=\"hljs-attr\">message<\/span>=<span class=\"hljs-string\">'Enter release version'<\/span>\/&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">echo<\/span> <span class=\"hljs-attr\">message<\/span>=<span class=\"hljs-string\">'Release version: ${release.version}'<\/span>\/&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">target<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Property resolution workflow<\/h2>\n\n\n\n<pre class=\"mermaid\">\nflowchart TD\n    A[Task needs a property] --> B{Set by D argument}\n    B -- yes --> C[Use command line value]\n    B -- no --> D{Set in build or property file}\n    D -- yes --> E[Use first assigned value]\n    D -- no --> F{Available as Java system property}\n    F -- yes --> G[Use system property]\n    F -- no --> H{Imported from env prefix}\n    H -- yes --> I[Use env prefixed value]\n    H -- no --> J[Optional input or fail]\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Best practices and common pitfalls<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Use <code>-D<\/code> properties for CI\/CD and environment-specific overrides.<\/li><li>Import environment variables with a clear prefix (for example, <code>env<\/code>) to avoid naming collisions.<\/li><li>Avoid interactive <code>input<\/code> tasks in automated pipelines.<\/li><li>Do not echo sensitive values (tokens, passwords, keys) into logs.<\/li><li>Keep default values in the build file and override only what is needed per run.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Apache Ant lets you reference properties with ${name}, including Java system properties, imported environment variables, and command-line values. This guide shows practical syntax, examples, precedence flow, and common pitfalls for reliable builds.<\/p>\n","protected":false},"author":1,"featured_media":4088,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[49],"tags":[380,3303,3308,3301,3305,3306,3113,173,3300,3302,3307,3310,3312,3311,3309,593,1073,3304],"class_list":["post-142","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-general","tag-access","tag-access-java-system-properties-directly","tag-command-line-to-access-java-system-properties","tag-directly","tag-environment-properties","tag-get-all-system-properties-in-java","tag-how-to","tag-java","tag-java-system","tag-java-system-properties","tag-java-system-properties-acces-command-line","tag-java-system-properties-access-guide","tag-java-system-properties-access-instructions","tag-java-system-properties-access-reference","tag-java-system-properties-access-tutorial","tag-process","tag-properties","tag-system-properties"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/142","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=142"}],"version-history":[{"count":3,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/142\/revisions"}],"predecessor-version":[{"id":78991,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/142\/revisions\/78991"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/4088"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=142"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=142"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=142"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}