2014-11-04 13 views
5

Używam rozwijania aplikacji internetowej przy użyciu rozruchu sprężynowego i chcę wygenerować wojnę zamiast słoika.Wyklucz application.properties podczas generowania wojny przy użyciu rozruchu sprężynowego i wtyczki rozruchowej-sprężyny

To działa bardzo dobrze używając konwersję z słoik do wojny opisane tutaj: http://spring.io/guides/gs/convert-jar-to-war/

Ale chcę wykluczyć application.properties z wojny, ponieważ używam @PropertySource(value = "file:${OPENSHIFT_DATA_DIR}/application.properties") uzyskać ścieżkę plików w środowisku produkcyjnym.

  • Ta metoda działa przy generowaniu moja wojna, ale w Eclipse nie mogę uruchomić mojej aplikacji, ponieważ application.properties nie skopiowane w ogóle kierować/klasy:

    <build> <resources> <resource> <directory>src/main/resources</directory> <excludes> <exclude>application.properties</exclude> </excludes> </resource> </resources> </build>

  • Ta metoda nie działa w ogóle, myślę, że wiosna-Boot-maven-plugin nie obsługuje packagingExcludes:

    <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <packagingExcludes>WEB-INF/classes/application.properties</packagingExcludes> </configuration> </plugin> </plugins> </build>

Masz kolejną sugestię?

Thnks

+0

Moje podejście do tego problemu jest po prostu nadpisuje konfigurację pakietu za pomocą parametru 'spring.config.location'. Ustawiam go w pliku kontekstowym Tomcat, na przykład wskazując plik konfiguracyjny, którego używam w środowisku produkcyjnym. Czy próbowałeś zrobić to w ten sposób, czy to rozwiązanie nie jest dla ciebie idealne? A może mógłbyś osiągnąć dokładnie to, co próbujesz zrobić, używając różnych profili budowania Maven dla dev i produkcji? Mam na myśli to, że application.properties byłby wyłączony tylko wtedy, gdybyś spakował swoją aplikację z profilem produkcyjnym Maven ... –

+0

Chcę tylko wykluczyć application.properties kiedy pakuję moją wojnę używając maven, wszystko inne działa dobrze. Nie chcę usuwać pliku application.properties po wygenerowaniu wojny. – amgohan

Odpowiedz

2

Rozwiązanie dodałem to rozpakować mój pakowane wojny usunąć application.properties plików i tworzenia nowej wojny o nazwie ROOT.war używając maven-antrun-plugin i uruchomić kilka mrówek zadań.

to co dodałem do moich wtyczek w pom.xml:

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-antrun-plugin</artifactId> 
<executions> 
    <execution> 
     <id>package</id> 
     <phase>package</phase> 
     <configuration> 
      <target> 
       <unzip src="target/${artifactId}-${version}.${packaging}" dest="target/ROOT/" /> 
       <delete file="target/ROOT/WEB-INF/classes/application.properties"/> 
       <zip destfile="target/ROOT.war" basedir="target/ROOT" encoding="UTF-8"/> 
       <delete dir="target/ROOT"/> 
      </target> 
     </configuration> 
     <goals> 
      <goal>run</goal> 
     </goals> 
    </execution> 
</executions> 
</plugin> 

Nazwałem mój cel wojnę jako ROOT.war ponieważ używam Tomcat na openshift PaaS, więc po prostu skopiować mój ROOT.war i popchnij do mojego repozytorium otwierającego. To jest to

+0

IMHO odpowiednia odpowiedź. Potrzebowałem go z lekkim akcentem: chcę dołączyć 'application.properties', ale żaden z mojego profilu' application - *. Properties'. A ponieważ moje dni ANT już dawno minęły, zajęło mi trochę czasu, aby znaleźć odpowiednią składnię, umieszczając ją tutaj: '' –

2

Z twojego pytania wynika, że ​​chcesz użyć application.properties dla swojego rozwoju. Ale nie chcesz go używać do produkcji.

Proponuję skorzystać z profili sprężynowych, aby to osiągnąć. W pliku właściwości

  1. Utwórz profil dla rozwoju. Umieść pod nim wszystkie swoje właściwości programistyczne.
  2. Nie twórz profilu do produkcji w swoim pliku właściwości.
  3. Podczas pracy ustaw aktywny profil na programowanie, aby właściwości zostały załadowane z pliku application.properties.
  4. Po uruchomieniu podczas produkcji ustaw aktywny profil na Produkcja. Chociaż application.properties zostanie załadowany do twojej WAR, ponieważ nie ma profilu do produkcji, żadna z właściwości nie zostanie załadowana.

Zrobiłem coś podobnego za pomocą YML. Jestem pewien, że musi istnieć sposób, aby zrobić to samo również przy pomocy pliku .properties.

spring: 
    profiles.active: development 
-- 
spring: 
    profiles: development 
something: 
    location: USA 
    unit1: Test1 
    unit2: Test2 

Można zmienić profil w czasie wykonywania przy użyciu

-Dspring.profiles.active=production 
+0

tak i nie. Jeśli przechowujesz te pliki właściwości profilu w src/main/resources, nie możesz ich załadować z nadrzędnego klasy classloadeder (np. Umieszczając je w $ TCHOME/lib), ponieważ są już zawarte w samej WAR –

1

Spróbuj korzystania z tego rozwiązania:

<plugin> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    <version>${spring.version}</version> 
    <configuration> 
     <addResources>false</addResources> 
    </configuration> 
</plugin> 

<addResources> fałszywe </addResources > utrzymają właściwości, gdy uruchamiasz mvn spring-boot: uruchom

4

Spróbuj użyć poniższego rozwiązania. To będzie działać:

<build> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
      <excludes> 
       <exclude>**/*.properties</exclude> 
      </excludes> 
     </resource> 
    </resources> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

Jeśli używasz powyższego roztworu podczas prowadzenia projektu w Eclipse IDE może pojawić się błąd, że plik właściwości nie zostanie znaleziony. Aby się tego pozbyć, musisz dodać folder zasobów w Run as as configuration (Uruchom konfiguracje ... -> Classpath -> User Entries -> Advanced ... -> Add Folders)

1

Podczas pracy w środowisku Eclipse, w danej konfiguracji Run, trzeba podać ścieżkę z propeties Spring Boot:

--spring.config.location=${workspace_loc:/YOURPROYECTNAME}/src/main/resources/ 
0

to jest utrzymanie zasobu application.properites nawet po wygenerowaniu pakietu jar nawet z <addResources>false</addResources>

Powiązane problemy