Specify system property to Maven project

Is there a way ( I mean how do I ) set a system property in a maven project?

I want to access a property from my test and my webapp ( running locally ) and I know I can use a java system property.

Should I put that in ./settings.xml or something like that?

Context

I took an open source project and managed to change the db configuration to use JavaDB

Now, in the jdbc url for JavaDB, the location of the database could be specified as the full path ( see: this other question )

Or a system property: derby.system.home

I have the code working already, but currently it is all hardcoded to:

 jdbc:derby:/Users/oscarreyes/javadbs/mydb

And I want to remove the full path, to leave it like:

 jdbc:derby:mydb

To do that I need to specify the system property ( derby.system.home ) to maven, but I don’t know how.

The test are performed using junit ( I don’t see any plugin in pom.xml ) and the web app runs with the jetty plugin.

Specifying the system property in the command line seems to work for jetty, but I’m not sure if that’s something practical ( granted some other users may run it from eclipse/idea/ whatever )

Specify system property on launch of application

I need to specify a System Property when launching my android application from Android Studio / gradle. I cant figure out ho to do that. Background is that my app needs to know the URL of the server

Maven system property priority

I have following pom.xml <project> <properties> <buildNumber>dev</buildNumber> </properties> <build> <finalName>${project.artifactId}-${project.version}-${bui

Specify common resources in a multi-module maven project

Is there any way to share resources between modules of a parent project in Maven? For example, I would like to specify one log4j.properties file for all the modules in a multi-module Maven project. Ge

Maven project.build.testSourceDirectory property not working from profile

I want to make testing for different folders in a maven project and I need to change the maven’s project.build.testSourceDirectory property. I’m using a maven profile for this problem. My profile look

set java system property during maven 2 compile?

I have a maven profile and want to set a property which is later on available per System.getProperty(..) in java: <profile> <id>local-dev</id> <properties> <my.comp.my.prop&

System property for maven plugin nested process

i wanted to setup hudson job to perform release of our project from hudson. But i have a problem: our build process is running tests that need connection to db, host:port of db is specified as system

In ScalaTest, how can I specify test tags via a system property

I am integrating new scala code with an existing system. Our database tests currently are triggered (via Maven and existing IDE configs) by setting the system property integration. This lets us do t

maven property ${project.artifact.selectedVersion.majorVersion}

I see in many pom.xml files the use of this property: ${project.artifact.selectedVersion.majorVersion} such as in: <project> <modelVersion>4.0.0</modelVersion> <groupId>my_grou

Maven: property substitution not done for /project/version tag of pom?

http://maven.apache.org/pom.html#Properties says property values are accessible anywhere within a POM. Should this read are accessible in most places within a POM? I can specify the version of a d

Maven – activate profile based on project property

Hi I am trying to achieve something like this: In a parent pom, I have <profile> <activation> <property> <name>Compile</name> <value>${project.artifactId}</value

Answers

If your test and webapp are in the same Maven project, you can use a property in the project POM. Then you can filter certain files which will allow Maven to set the property in those files. There are different ways to filter, but the most common is during the resources phase – http://www.sonatype.com/books/mvnref-book/reference/resource-filtering-sect-description.html

If the test and webapp are in different Maven projects, you can put the property in settings.xml, which is in your maven repository folder (C:/Documents and Settings/username.m2) on Windows. You will still need to use filtering or some other method to read the property into your test and webapp.

Is there a way ( I mean how do I ) set a system property in a maven project? I want to access a property from my test […]

You can set system properties in the Maven Surefire Plugin configuration (this makes sense since tests are forked by default). From Using System Properties:

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.5</version>
        <configuration>
          <systemPropertyVariables>
            <propertyName>propertyValue</propertyName>
            <buildDirectory>${project.build.directory}</buildDirectory>
            [...]
          </systemPropertyVariables>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

and my webapp ( running locally )

Not sure what you mean here but I’ll assume the webapp container is started by Maven. You can pass system properties on the command line using:

mvn -DargLine="-DpropertyName=propertyValue"

Update: Ok, got it now. For Jetty, you should also be able to set system properties in the Maven Jetty Plugin configuration. From Setting System Properties:

<project>
  ...
  <plugins>
    ...
      <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>maven-jetty-plugin</artifactId>
        <configuration>
         ...
         <systemProperties>
            <systemProperty>
              <name>propertyName</name>
              <value>propertyValue</value>
            </systemProperty>
            ...
         </systemProperties>
        </configuration>
      </plugin>
  </plugins>
</project>

properties-maven-plugin plugin may help:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>properties-maven-plugin</artifactId>
    <version>1.0-alpha-2</version>
    <executions>
        <execution>
            <goals>
                <goal>set-system-properties</goal>
            </goals>
            <configuration>
                <properties>
                    <property>
                        <name>my.property.name</name>
                        <value>my.property.value</value>
                    </property>
                </properties>
            </configuration>
        </execution>
    </executions>
</plugin>

I have learned it is also possible to do this with the exec-maven-plugin if you’re doing a “standalone” java app.

            <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>${maven.exec.plugin.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>java</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>${exec.main-class}</mainClass>
                <systemProperties>
                    <systemProperty>
                        <key>myproperty</key>
                        <value>myvalue</value>
                    </systemProperty>
                </systemProperties>
            </configuration>
        </plugin>