2017-04-13 5 views
0

Wir verwendeten ant für das Bauen (ein riesiges) Projekt und (aus Legacy-Gründen) verschachtelten wir Eigenschaften innerhalb von Eigenschaftendateien ziemlich tief.Nest-Eigenschaften in Eigenschaften (in Eigenschaften) (ant auf maven migration)

(innen build.xml zum Beispiel)

<ant dir="${object.build.dir}" target="deploy" /> 

(innerhalb einer Eigenschaft Datei :)

object.build.dir=${base.dir} 

(innerhalb einer anderen Eigenschaft Datei (manchmal sogar gleich)):

base.dir=${env}/some/dir 

Dann, weil die Ameise nicht mehr so ​​aktuell ist, ziehen wir jetzt nach Maven, was ein Albtraum wäre ...

Die Frage ist: Wie lesen Sie die Eigenschaften, die das Ergebnis der Verschachtelung Eigenschaften innen Eigenschaften für bis 5 Ebenen tief manchmal sind ...

(als Test)

Filter/top_level. Eigenschaften:

env=test 

Filter/test/mid_level.properties:

specific=spec 

Filter/top_level.properties könnte auch (für eine andere Umgebung) lesen:

env=prod 

und so Filter/prod/mid_level.properties:

specific=spock 

Die Frage läuft darauf hinaus, dieses:

Wie lese/verwende ich eine 'spezifische' Eigenschaft, die in einer Eigenschaftendatei definiert ist, für die der Pfad in einer anderen Eigenschaftendatei definiert ist?) (Und diese Art der Verschachtelung überall?)

Dies betrifft auch nicht "Ressourcen" (diese sind auch beteiligt, aber nicht das Hauptproblem, Ressourcen sind Eigenschaften, die von der Anwendung verwendet werden, die Eigenschaften, über die ich spreche, sind Eigenschaften, die nur zur Erstellungszeit verwendet werden die Build geschieht)

ich eine Antwort gefunden, aber wenn es ein besseres ist würde ich froh sein, dass als beste Antwort zu wählen ...

S.

+0

Ihre Eigenschaften sehen wie ein Setup für verschiedene Umgebungen aus, das nie eine gute Idee ist, Eigenschaften für weder in Ant noch in Maven zu verwenden. ..May be you können Sie hier einen Blick darauf werfen: https://github.com/khmarbaise/multienv-maven-plugin...Weiterhin gehe ich davon aus, dass Sie jedes Mal für jede Eigenschaft bauen, was für dev, prod etc. bedeutet Arbeite nicht in Maven ... baue nur einmal und produziere alle benötigten Outputs in einem Lauf ... – khmarbaise

+0

hey, danke, ich werde es mir mal anschauen, S. – Bamboomy

Antwort

0

In maven Sie die properties:read-project-properties Plugin .

Wenn Sie es so verwenden, werden verschachtelte Eigenschaften nicht in absteigende eingefügt: (Maven wird immer noch beschweren, es findet nicht die "filters/$ {env}/mid_level.Eigenschaften“Eigenschaftendatei

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>properties-maven-plugin</artifactId> 
      <version>1.0.0</version> 
      <executions> 
       <execution> 
        <id>execution1</id> 
        <phase>initialize</phase> 
        <goals> 
         <goal>read-project-properties</goal> 
        </goals> 
        <configuration> 
         <files> 
          <file>filters/top_level.properties</file> 
          <file>filters/${env}/mid_level.properties</file> 
         </files> 
        </configuration> 
       </execution> 
      </plugin> 
    </plugins> 
</build> 

Aber wenn man getrennte Ausführungen wie folgt aus (+ den Wert von 'spezifischen' Echo :)

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>test</groupId> 
    <artifactId>test</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>test</name> 
    <description>test</description> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>properties-maven-plugin</artifactId> 
       <version>1.0.0</version> 
       <executions> 
        <execution> 
         <id>execution1</id> 
         <phase>initialize</phase> 
         <goals> 
          <goal>read-project-properties</goal> 
         </goals> 
         <configuration> 
          <files> 
           <file>filters/top_level.properties</file> 
          </files> 
         </configuration> 
        </execution> 
        <execution> 
         <id>execution2</id> 
         <phase>initialize</phase> 
         <goals> 
          <goal>read-project-properties</goal> 
         </goals> 
         <configuration> 
          <files> 
           <file>filters/${env}/mid_level.properties</file> 
          </files> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

      <plugin> 
       <groupId>com.soebes.maven.plugins</groupId> 
       <artifactId>maven-echo-plugin</artifactId> 
       <version>0.1</version> 
       <executions> 
        <execution> 
         <phase>install</phase> 
         <goals> 
          <goal>echo</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <echos> 
         <echo>Animal: ${specific}</echo> 
        </echos> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Ausgang mit env = prod:

[INFO] --- maven-echo-plugin:0.1:echo (default) @ test --- 
[INFO] Animal: spock 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 2.663 s 
[INFO] Finished at: 2017-04-13T21:32:30+02:00 
[INFO] Final Memory: 11M/164M 
[INFO] ------------------------------------------------------------------------ 

Problem gelöst :)

Sie müssen nur so viele Eigenschaften Ausführungen wie Tiefe der Verschachtelung + Refactoring der haben Eigenschaften, um sie in Schichten zu haben aber appart davon, dass dieses Problem 'leicht' gelöst wird ...

Verwandte Themen