Préciser la propriété du système au projet Maven

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

je veux accéder à une propriété de mon test et de mon webapp ( fonctionnant localement ) et je sais que je peux utiliser une propriété du système java.

si je mets ça ./paramètre.xml ou quelque chose comme ça?

Contexte

j'ai pris un projet open source et j'ai réussi à changer la configuration db pour utiliser JavaDB

maintenant, dans L'url JDBC pour JavaDB, l'emplacement de la base de données pourrait être spécifié comme le chemin complet ( voir: cette autre question )

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

j'ai déjà le code qui fonctionne, mais pour l'instant il est entièrement codé:

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

et je veux enlever le chemin complet, pour le laisser comme:

 jdbc:derby:mydb

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

le test est réalisé en utilisant junit ( Je ne vois pas de plugin dans pom.xml ) et l'application web fonctionne avec le plugin jetty.

spécifier la propriété du système dans la ligne de commande semble fonctionner pour jetty, mais je ne suis pas sûr si c'est quelque chose de pratique ( étant donné que d'autres utilisateurs peuvent l'exécuter à partir d'eclipse/idea/ whatever)

51
demandé sur Community 2010-07-12 23:57:05

4 réponses

y a-t-il un moyen ( je veux dire comment ) de définir une propriété système 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 la configuration Maven Surefire Plugin (cela a du sens puisque les tests sont bifurqués par défaut). De En Utilisant Les Propriétés Du 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 mon webapp (fonctionnant localement )

Je ne suis pas sûr de ce que vous voulez dire ici, mais je suppose que le conteneur webapp est lancé par Maven. Vous pouvez passer les propriétés du système sur la ligne de commande en utilisant:

mvn -DargLine="-DpropertyName=propertyValue"

Update: Ok, c'est bon. Pour Jetty, vous devriez également être en mesure de définir les propriétés du système dans la configuration du Plugin Maven Jetty. De 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>
58
répondu Pascal Thivent 2010-07-12 20:57:48

propriétés-maven-plugin 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>
52
répondu yegor256 2016-05-17 10:28:28

j'ai appris qu'il est également possible de faire cela avec le exec-maven-plugin 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>
9
répondu bvesco 2013-12-28 01:25:26

si votre test et webapp sont dans le même projet Maven, vous pouvez utiliser une propriété dans le projet 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 le plus commun est pendant la phase des ressources - http://books.sonatype.com/mvnref-book/reference/resource-filtering-sect-description.html

si le test et webapp sont dans des projets Maven différents, vous pouvez mettez la propriété dans les paramètres.xml, qui est dans votre dossier Maven (C:\Documents et paramètres\Nom d'utilisateur.m2) sur les fenêtres. Vous aurez toujours besoin d'utiliser le filtrage ou une autre méthode pour lire la propriété dans votre test et webapp.

2
répondu amram99 2017-03-01 18:55:15