2012-03-28 17 views
16

Mam plik działce z następującymMaven - Odczytywanie własności z właściwościami pliku zewnętrznego

junit.version=3.8.1 
dbcp.version=5.5.27 
oracle.jdbc.version=10.2.0.2.0 

Staram się czytać tych właściwości z mojego pliku pom jak pokazano poniżej

<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>${junit.version}</version> 
    <scope>test</scope> 
</dependency> 


<dependency> 
    <groupId>dbcp</groupId> 
    <artifactId>dbcp</artifactId> 
    <version>${dbcp.version}</version> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>com.oracle</groupId> 
    <artifactId>ojdbc14</artifactId> 
    <version>${oracle.jdbc.version}</version> 
    <scope>provided</scope> 
</dependency> 

a konfiguracja wtyczki

<plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>properties-maven-plugin</artifactId> 
     <executions> 
      <!-- Associate the read-project-properties goal with the initialize phase, to read the properties file. --> 
      <execution> 
      <phase>initialize</phase> 
      <goals> 
       <goal>read-project-properties</goal> 
      </goals> 
      <configuration> 
       <files> 
       <file>../live.properties</file> 
       </files> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 

Uważam, że gdy uruchamiam mvn czyste zainstalować go nie znaleźć właściwości, zamiast tego pojawia się wi Następujące błędy:

'dependencies.dependency.version' for junit:junit:jar must be a valid version but is '${junit.version}'. @ line 23, column 16 
'dependencies.dependency.version' for dbcp:dbcp:jar must be a valid version but is '${dbcp.version}'. @ line 31, column 12 
'dependencies.dependency.version' for com.oracle:ojdbc14:jar must be a valid version but is '${oracle.jdbc.version}'. @ line 37, column 13 

Powyższe niepowodzenia występują w sytuacjach, gdy odwołuję się do właściwości, gdy deklaruję zależność. Zauważyłem, że w niektórych innych sytuacjach właściwość jest odczytywana z pliku. Na przykład to działa w przypadku korzystania z nieruchomości na metce wersji projektu (nie zależność wersja)

Wydaje się, że nieruchomość nie jest czytany z pliku, jeśli jest mowa w zgłoszeniu zależność ale jest czytana jeżeli mowa z dowolnego miejsca. Jakieś pomysły?

+0

Jaki jest sens posiadania tych wersji w oddzielnym pliku? – artbristol

+0

Udostępniam ten plik właściwości innym projektem, który tworzy nakładkę wojenną przy użyciu wersji. – ziggy

Odpowiedz

12

Faza initialize nie jest częścią clean lifecycle. Musisz także powiązać wtyczkę właściwości z fazą pre-clean.

Rozdzielczość zależności jest jednak uruchamiana przed rozwiązywaniem i uruchamianiem innych wtyczek, więc Twoje podejście nie będzie działać.

Właściwym sposobem radzenia sobie z tym byłoby przeniesienie wersji zależności do nadrzędnego pom.xml i użycie tego samego nadrzędnego pom w obu projektach.

+0

Którą fazę należy zastosować, aby upewnić się, że właściwości są załadowane, zgodnie z poleceniem mvn? – ziggy

+0

Już odpowiedziałem na to. Polecenie mvn clean używa innego cyklu życia, który ma zupełnie inne fazy niż domyślny cykl życia (na przykład pakiet mvn lub instalacja mvn). Proszę kliknąć link do dokumentacji z mojej odpowiedzi. –

+0

Masz na myśli coś takiego? wstępne czyszczenie, inicjowanie ziggy

1

u można określić tak:

<plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>properties-maven-plugin</artifactId> 
      <version>1.0-alpha-2</version> 
      <executions> 
       <execution> 
       <id>pre-clean-config</id> 
        <phase>pre-clean</phase> 
        <goals> 
         <goal>read-project-properties</goal> 
        </goals> 
        <configuration> 
         <files> 
          <file>config.properties</file> 
         </files> 
        </configuration> 
       </execution> 
       <execution> 
       <id>initialize-config</id> 
        <phase>initialize</phase> 
        <goals> 
         <goal>read-project-properties</goal> 
        </goals> 
        <configuration> 
         <files> 
          <file>config.properties</file> 
         </files> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
Powiązane problemy