Question

Existe-t-il un moyen (je veux dire, comment) définir une propriété système dans un projet maven ?

Je souhaite accéder à une propriété de mon test et de ma webapp (exécutée localement) et je sais que je peux utiliser une propriété système Java.

Dois-je mettre cela dans ./settings.xml ou quelque chose comme ça ?

Contexte

J'ai pris un projet open source et j'ai réussi à modifier la configuration de la base de données pour utiliser JavaDB

Désormais, dans l'URL jdbc pour JavaDB, l'emplacement de la base de données peut être spécifié comme chemin complet (voir : cette autre question )

Ou une propriété système : derby.system.home

Le code fonctionne déjà, mais actuellement, tout est codé en dur pour :

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

Et je veux supprimer le chemin complet, pour le laisser comme :

 jdbc:derby:mydb

Pour ce faire, je dois spécifier la propriété système ( derby.system.home ) à maven, mais je ne sais pas comment.

Les tests sont effectués à l'aide de Junit (je ne vois aucun plugin dans pom.xml) et l'application Web fonctionne avec le plugin jetty.

Spécifier la propriété système dans la ligne de commande semble fonctionner pour Jetty, mais je ne sais pas si c'est quelque chose de pratique (étant donné que d'autres utilisateurs peuvent l'exécuter à partir d'Eclipse/idea/peu importe)

Était-ce utile?

La solution

Existe-t-il un moyen (je veux dire, comment) définir une propriété système dans un projet maven ?Je souhaite accéder à une propriété de mon test [...]

Vous pouvez définir les propriétés du système dans le Plugin Maven Surefire configuration (cela est logique puisque les tests sont fork par défaut).Depuis Utilisation des propriétés système:

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

et ma webapp (exécutée localement)

Je ne sais pas ce que vous voulez dire ici, mais je suppose que le conteneur webapp est démarré par Maven.Vous pouvez transmettre les propriétés système sur la ligne de commande en utilisant :

mvn -DargLine="-DpropertyName=propertyValue"

Mise à jour: Ok, je l'ai compris maintenant.Pour Jetty, vous devriez également pouvoir définir les propriétés système dans la configuration du plug-in Maven Jetty.Depuis Définition des propriétés du système:

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

Autres conseils

propriétés-maven-plugin le plugin peut aider:

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

J'ai appris qu'il est également possible de le faire avec le plugin exec-maven si vous créez une application Java "autonome".

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

Si votre test et votre application Web se trouvent dans le même projet Maven, vous pouvez utiliser une propriété dans le POM du projet.Ensuite, vous pouvez filtrer certains fichiers, ce qui permettra à Maven de définir la propriété dans ces fichiers.Il existe différentes manières de filtrer, mais la plus courante se situe pendant la phase de ressources - http://books.sonatype.com/mvnref-book/reference/resource-filtering-sect-description.html

Si le test et l'application Web se trouvent dans des projets Maven différents, vous pouvez placer la propriété dans settings.xml, qui se trouve dans votre dossier de référentiel maven (C:\Documents and Settings\username.m2) sous Windows.Vous devrez toujours utiliser le filtrage ou une autre méthode pour lire la propriété dans votre test et votre application Web.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top