Systeemeigenschap opgeven voor Maven-project

Is er een manier (ik bedoel hoe kan ik) een systeemeigenschap instellen in een maven-project?

Ik wil toegang tot een eigenschap van mijn test en mijn webapp (lokaal draaiend) en ik weet dat ik een Java-systeemeigenschap kan gebruiken.

Moet ik dat in ./settings.xml of iets dergelijks zetten?

Context

Ik nam een ​​open source-project en slaagde erin de db-configuratie te wijzigen om JavaDB te gebruiken

In de jdbc-url voor JavaDB kan de locatie van de database worden opgegeven als het volledige pad (zie: deze andere vraag)

Of een systeemeigenschap: derby.system.home

Ik heb de code al werkend, maar momenteel is het allemaal hardcoded om:

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

En ik wil het volledige pad verwijderen, om het zo te laten:

jdbc:derby:mydb

Om dat te doen, moet ik de systeemeigenschap ( derby.system.home) specificeren om te maven, maar ik weet niet hoe.

De test wordt uitgevoerd met junit ( ik zie geen plug-in in pom.xml ) en de web-app wordt uitgevoerd met de jetty-plug-in.

Het specificeren van de systeemeigenschap in de opdrachtregel lijkt te werken voor jetty, maar ik weet niet zeker of dat iets praktisch is (toegegeven dat sommige andere gebruikers het kunnen uitvoeren vanuit eclipse/idea/whatever )


Antwoord 1, autoriteit 100%

Is er een manier (ik bedoel hoe kan ik) een systeemeigenschap instellen in een maven-project? Ik wil toegang krijgen tot een woning vanuit mijn test […]

Je kunt systeemeigenschappen instellen in de Maven Surefire Plugin-configuratie (deze is logisch omdat tests standaard worden gevorkt). Van Systeemeigenschappen gebruiken:

<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>

en mijn webapp (lokaal actief)

Ik weet niet zeker wat je hier bedoelt, maar ik neem aan dat de webapp-container is gestart door Maven. U kunt systeemeigenschappen op de opdrachtregel doorgeven met:

mvn -DargLine="-DpropertyName=propertyValue"

Update:Ok, nu begrepen. Voor Jetty zou je ook systeemeigenschappen moeten kunnen instellen in de Maven Jetty Plugin-configuratie. Van Systeemeigenschappen instellen:

<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>

Antwoord 2, autoriteit 91%

properties-maven-pluginplug-in kan helpen:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>properties-maven-plugin</artifactId>
    <version>1.0.0</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>

Antwoord 3, autoriteit 12%

Ik heb geleerd dat het ook mogelijk is om dit te doen met de exec-maven-plugin als je een “zelfstandige” java-app gebruikt.

           <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>

Antwoord 4, autoriteit 2%

Als uw test en webapp zich in hetzelfde Maven-project bevinden, kunt u een eigenschap in het project POM gebruiken. Vervolgens kunt u bepaalde bestanden filteren waardoor Maven de eigenschap in die bestanden kan instellen. Er zijn verschillende manieren om te filteren, maar de meest voorkomende is tijdens de bronnenfase – http://books.sonatype.com/mvnref-book/reference/resource-filtering-sect-description.html

Als de test en webapp zich in verschillende Maven-projecten bevinden, kunt u de eigenschap in settings.xml plaatsen, die zich in uw maven-repositorymap (C:\Documents and Settings\gebruikersnaam.m2) op Windows bevindt. U moet nog steeds filteren of een andere methode gebruiken om de eigenschap in uw test en webapp in te lezen.

Other episodes