2013-04-29 8 views
5

Chcę użyć Mavena do obsługi generowania artefaktów dla różnych lokalnych i testujących regionów. Uważam, że mogę używać różnych profili, ale nie jestem pewien.Jak używać Mavena i różnych aplikacji.properties do generowania artefaktów w różnych regionach testowych w Spring skonfigurowanej aplikacji

Czy w Maven mogę wybrać różne katalogi do wyboru plików używanych na opakowaniach (takich jak application.properties)? Jak mam to ustawić?

pomysł co chcę jest mieć następujące foldery do zasobów w moim projekcie

  • lokalnej
  • serwera kompilacji
  • dev
  • sys
  • prod

Każdy folder powinien zawierać różnicę nt wersja application.resources, która jest plikiem na wiosnę, który może być używany do obsługi zakodowanych ciągów znaków w celu użycia ich w zmiennych. W przypadku lokalnych wersji - nasi programiści pracują również nad różnymi systemami operacyjnymi. Czy powinienem chcieć sprawić, by był płynny w różnych systemach operacyjnych?

Podstawowe efekty byłyby:

  • Kontrola Maven lifecycle phases od wewnątrz IDE (IntelliJ)
  • nie komplikować fazy i zespół przetwarza
  • przechowywać rzeczy jak spójne dla każdego autora
  • Dodać różne konfiguracje na programistę/region pojawiają się niewidoczne podczas uruchamiania fazy, np zainstalować

Idealnie byłoby ustawić mój projekt zgodnie z best practices (Duvall, Matyas, Glover).

+1

profili użycie Maven (http://maven.apache.org/guides/introduction/introduction-to-profiles.html) oraz filtrowanie zasobów (http: // Maven. apache.org/plugins/maven-resources-plugin/examples/filter.html) – willome

Odpowiedz

4

Oferujemy różne właściwości obecnie, ale nie za pomocą różnych folderów. Robimy to poprzez mieszanką

  • PropertyPlaceholderConfigurer
  • profili Mavena sprężyny (coś używamy do budowy naszego środowiska Dev),
  • Budowa Server (TeamCity w naszym przypadku)
  • fazy Maven produkować prawidłowa artefakt
  • uruchomienie i budować argumenty

Moje zrozumienie tego, co możemy zrobić, to l naśladować, ale mam nadzieję, że jest to użyteczny przykład dla innych i być może ja sam rozważam.

Dostarczamy parametry, jak widać poniżej, wskazujące różne pliki właściwości. Każdy plik właściwości ma konfigurację dla regionu/środowiska. Wyjaśnię bieżące użycie najlepiej jak potrafię, w przypadku, gdy zapewni inne korzyści.

Aby korzystać z profili Maven, utworzyliśmy profile w naszym pom zidentyfikowanym jako development, który zawiera właściwość konfiguracji regionu o nazwie env. Nie wiem jeszcze do końca, jak to jest jeszcze używane w naszym projekcie, ale poniżej zobaczysz nasz POM z wtyczką Maven Compiler i wtyczką Maven Tomcat.

Z dnia na dzień, jako programiści uruchamiamy nasze nasze aplikacje lokalnie na serwerze Tomcat z poziomu IntelliJ i dostarczamy właściwość env. Przy uruchamianiu właściwość env jest dostarczana jako argument dla ustawionej na classpath*:dev-common.properties. Ten plik jest plikiem konfiguracyjnym właściwości - ustawiającym wartości zastępcze dla różnych regionów .

Wartość env udostępnienie naszym PropertyPlaceholderConfigurer


Przykład 1 - Wykonanie Mavenie profile w pom.xml:

Wdrożenie profile w naszym POM:

<profile> 
     <id>development</id> 
     <activation> 
      <property> 
       <name>env</name> 
       <value>development</value> 
      </property> 
     </activation> 
     <build> 
      <pluginManagement> 
       <plugins> 
        <plugin> 
         <artifactId>maven-compiler-plugin</artifactId> 
         <version>2.3.2</version> 
         <configuration> 
          <source>1.6</source> 
          <target>1.6</target> 
         </configuration> 
        </plugin> 
        <plugin> 
         <groupId>org.apache.tomcat.maven</groupId> 
         <artifactId>tomcat7-maven-plugin</artifactId> 
         <version>2.0-SNAPSHOT</version> 
      ... 
        </plugin> 
       </plugins> 
      </pluginManagement> 
     </build> 
    </profile> 

Przykład 2 - Obiekt zastępczy konfiguratora dla normalnej produkcji:

Wykonujemy również stosowanie ofa Wiosna składnik, a PropertyPlaceholderConfigurer. Używamy tego we współpracy z argumentem budowania, aby ustawić ścieżkę klasy Clashspath do plików zasobów w postaci.

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <list> 
      <value> 
       ${env} 
      </value> 
     </list> 
    </property> 


Przykład 3 - Obiekt zastępczy konfiguratora dla testu:

Mamy Wiosna Konteksty specjalnie skonfigurowane do testowania integracyjnego, który również użyć PropertyPlaceholderConfigurer. Są one pobierane przez testową klasę integracji przy użyciu kombinacji @ContextConfiguration(locations = {"classpath:test-dataexchange-application-context.xml"}) i @RunWith(SpringJUnit4ClassRunner.class)).

W kontekście testowania możemy skonfigurować PropertyPlaceholderConfigurer następująco odebrać właściwości obszaru testowania Integracja:

<bean id="testpropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <list> 
      <value>classpath*:dev-local-common.properties</value> 
     </list> 
    </property> 


Inne uwagi:

Mamy wykorzystaj Team City do zarządzania budową, ale nie widziałem, jak te ustawienia to użyte tam, jeśli w ogóle są. Mogę sobie wyobrazić, że istnieje możliwość połączenia powyższych podejść w celu wsparcia ciągłej integracji i dostawy.

Nie widzę, gdzie jest używany profil oznaczony jako development.To jest coś, co muszę wykonać za pośrednictwem moich kolegów członków zespołu.


Zasoby:

1

Cel wygenerować artefakty dla każdego środowiska jednorazowo na serwerze centralnym (serwer CI/Build), zmierzaj do wygenerowania artefaktu i rozpocznij/przetestuj aplikację za pomocą jednego kliknięcia na miejscu, zapewnij spójny i łatwy do nauczenia sposób na sprawdzenie i uruchomienie kompilacji, a także zaewidencjonowanie i skonfigurowanie twoje CI.

Możesz używać profili w Maven i wykorzystywać cele Mavena, aby uzyskać odpowiednią kompilację za pomocą serwera kompilacji, który w naszym przypadku jest TeamCity.

Użyj konfiguratora symboli zastępczych właściwości w kontekście Wiosna z plikiem application.resources dla każdego regionu i maski nazwy pliku, np. application-resources-${region}.

3

Jeśli używasz Spring Boot, istnieje prosty sposób na zrobienie tego.

Utwórz dwa profile w maven i ustaw właściwość w każdym profilu z nazwą profilu Spring, który chcesz wykonać.

<profile> 
     <id>dev</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <!-- Default spring profile to use --> 
      <spring.profiles.active>dev</spring.profiles.active> 
      <!-- Default environment --> 
      <environment>develop</environment> 
     </properties> 
    </profile> 

wewnątrz application.properties, dodać tę właściwość: spring.profiles.active = $ {spring.profiles.active}

Załóż application.property dla każdego profilu, używając tego wzoru application- profile.properties. Na przykład: application-dev.properties application-prod.properties

Koniecznie aktywnego filtrowania w wtyczce zasobów:

... 
    <resource> 
    <directory>src/main/resources</directory> 
    <filtering>true</filtering> 
    </resource> 
... 

Innym sposobem jest utworzenie pliku w trakcie wykonywania maven nazywa activeprofile .nieruchomości. Spring boot wyświetla ten plik, aby załadować aktywny profil. Można utworzyć ten plik w następujący sposób:

<plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>prepare-package</phase> 
        <configuration> 
         <target> 
          <echo message="spring.profiles.active=${spring.profiles.active}" file="target/classes/config/activeprofile.properties" /> 
         </target> 
        </configuration> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
      </configuration> 
     </plugin> 
Powiązane problemy