33

In maven 2.x, how would one set a plugin's property on the command line instead of in the <configuration> of that plugin in the pom or in settings.xml?

For example, if I was using mvn dependency:copy-dependencies(seen here) how can I set the useRepositoryLayout property without touching either the pom or my settings.xml?

Thanks!

Rich Seller
  • 83,208
  • 23
  • 172
  • 177
whaley
  • 16,075
  • 10
  • 57
  • 68

4 Answers4

25

Answer was right in front of me in the copy-dependencies mojo docs (I even linked to it). The documentation for the property includes the Expression you can refer to it by.

useRepositoryLayout: Place each artifact in the same directory layout as a default repository. example: /outputDirectory/junit/junit/3.8.1/junit-3.8.1.jar

* Type: boolean
* Since: 2.0-alpha-2
* Required: No
* Expression: ${mdep.useRepositoryLayout}
* Default: false

To set this property from command line you need to run

mvn -Dmdep.useRepositoryLayout=true <goals go here>
Sergei Tachenov
  • 24,345
  • 8
  • 57
  • 73
whaley
  • 16,075
  • 10
  • 57
  • 68
  • 17
    To clarify, you need something like this: `mvn -Dmdep.useRepositoryLayout=true dependency:copy-dependencies` – Steve Jul 07 '11 at 09:20
15

Define the properties as arbitrary properties ... not the standard maven props such as version. In my case I defined a new property build.version:

<properties> build.version=unknown </properties>

I use the property:

<warName>${build.version}</warName>

I define the property:

mvn -P prod -Dbuild.version=app_name-branch_name-build_number package
bcolfer
  • 639
  • 1
  • 6
  • 15
  • Here is a good link: http://www.sonatype.com/books/mvnref-book/reference/resource-filtering-sect-properties.html#resource-filtering-sect-user-defined – bcolfer Oct 05 '10 at 19:54
  • 1
    Although the original user's specific question was answered, this response answers the generic question that was the title of the post. Thanks! – Rob V Jan 26 '12 at 19:21
6

Usually you set maven properties using the same syntax as java system properties. Have you tried the following line?

mvn -DuseRepositoryLayout=true dependency:copy-dependencies
David Rabinowitz
  • 29,904
  • 14
  • 93
  • 125
  • 5
    This only works if the plugin author has annotated the variable with an expression. They will be shown in the plugin docs as shown in the above answer. – Brian Fox Feb 06 '10 at 21:38
1

The other answers here were not clear to me. This is the way I understand it:

If the plugin code uses a system property for its parameter, then you can define the value on the command line.

There are 3 different ways you can accomplish this in the plugin code:

@parameter expression="${aSystemProperty}" 
@parameter default-value="${anExpression}"
@parameter property="aSystemProperty"

If any or a combination of these methods are used in the plugin code for a particular property, then you can specify a value for the plugin parameter, on the command line. Above code was taken from maven docs here.

If you are using a plugin with the above code, you could specify a value for your property using the following command:

mvn -DaSystemProperty=my-value <goal-here>
Freddie
  • 908
  • 1
  • 12
  • 24