67 votes

Spécifier la propriété système au projet Maven

Est-il possible ( je veux dire, comment puis-je ) définir un système de propriété dans un projet maven?

Je veux accéder à une propriété de mon test et mon webapp ( s'exécutant localement ) et je sais que je peux utiliser une propriété système java.

Dois-je les placer ./settings.xml ou quelque chose comme ça?

Contexte

J'ai pris un projet open source et a réussi à modifier la db de configuration à utiliser JavaDB

Maintenant, dans l'url jdbc pour JavaDB, l'emplacement de la base de données peut être défini comme le chemin d'accès complet ( voir: cette autre question )

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

J'ai le code fonctionne déjà, mais actuellement il est tout codé en dur:

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

Et je veux supprimer le chemin d'accès complet, de le laisser comme:

 jdbc:derby:mydb

Pour ce faire j'ai besoin de spécifier le système de la propriété ( derby.system.home ) à maven, mais je ne sais pas comment.

Les tests sont effectués en utilisant junit ( je ne vois pas de plugin dans pom.xml ) et de l'application web fonctionne avec le plugin jetty.

En spécifiant le système de la propriété dans la ligne de commande semble fonctionner pour la jetée, mais je ne sais pas si c'est quelque chose de pratique ( certes certains autres utilisateurs peuvent exécuter à partir d'eclipse/idée/ whatever )

83voto

Pascal Thivent Points 295221

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

Vous pouvez définir les propriétés du système dans le Maven Plugin Surefire de configuration (ce qui est logique puisque les tests sont fourche par défaut). De L'Aide 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 ( s'exécutant localement )

Pas sûr de ce que vous voulez dire ici, mais je vais assumer la webapp conteneur est commencé par Maven. Vous pouvez passer des propriétés du système sur la ligne de commande à l'aide de:

mvn -DargLine="-DpropertyName=propertyValue"

Mise à jour: Ok, il a obtenu maintenant. Pour la Jetée, vous devez également être en mesure de définir les propriétés du système dans le Maven Jetty de configuration du Plugin. De Configuration 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>

75voto

yegor256 Points 21737

Le plugin properties-maven- plugin peut aider:

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

10voto

bvesco Points 86

J'ai appris qu'il est également possible de faire cela avec le plugin exec-maven si vous faites 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>
 

2voto

amram99 Points 80

Si votre test et webapp sont dans le même projet Maven, vous pouvez utiliser une propriété dans le projet de POM. Ensuite, vous pouvez filtrer certains fichiers qui permettent de Maven pour définir la propriété dans ces fichiers. Il y a différentes façons de filtrer, mais la plus commune est au cours de la phase ressources - http://www.sonatype.com/books/mvnref-book/reference/resource-filtering-sect-description.html

Si le test et webapp sont dans différents projets Maven, vous pouvez mettre le bien en settings.xml qui est dans votre repository maven dossier (C:\Documents and Settings\nom d'utilisateur.m2) sur Windows. Vous aurez toujours besoin d'utiliser le filtrage ou d'une autre méthode de lire la propriété dans votre test et webapp.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X