Pytanie Maven - Odczytywanie właściwości z zewnętrznego pliku właściwości


Mam plik właściwości z następującymi

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

Próbuję odczytać te 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>

i 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>

Odkrywam, że kiedy uruchomię instalację mvn clean, to nie odnajduję właściwości, a zamiast tego pojawiają się 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 wydają się być w sytuacjach, w których 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 działa, jeśli używam właściwości w tagu wersji projektu (nie w wersji zależnej)

Wygląda na to, że właściwość nie jest odczytywana z pliku, jeśli jest przywoływana z deklaracji zależności, ale jest odczytywana, gdy jest przywoływana z dowolnego miejsca. Jakieś pomysły?


16
2018-03-28 17:25


pochodzenie


Jaki jest sens posiadania tych wersji w osobnym pliku? - artbristol
Udostępniam ten plik właściwości innym projektem, który tworzy nakładkę wojenną za pomocą wersji. - ziggy


Odpowiedzi:


The initialize faza nie jest częścią czysty cykl życia. Musisz również powiązać wtyczkę właściwości z pre-clean faza.

Jednak rozwiązywanie zależności uruchamia się przed rozwiązywaniem i uruchamianiem innych wtyczek, więc twoje podejście nie zadział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.


12
2018-03-28 18:25



Którą fazę należy zastosować, aby upewnić się, że właściwości są załadowane, biorąc pod uwagę komendę mvn? - ziggy
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. - Eugene Kuleshov
Czy masz na myśli coś takiego? <phase> wstępne czyszczenie, inicjalizacja </ phase> - ziggy
Próbowałem dodać zarówno pre-clean, jak i intialize, ale nie działało. - ziggy
Przepraszam, powinienem czytać twoje pytanie dokładniej ... Nie możesz określić wielu faz w elemencie <phase>. Ale nie można używać właściwości ładowanych przez właściwości-maven-plugin do określania wersji zależności. Zaktualizowałem swoją odpowiedź, stosując właściwe rozwiązanie. - Eugene Kuleshov


możesz zdefiniować 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>

1
2017-07-09 04:42