chcę użyć klucza zdefiniowanego w pliku właściwości jako zmienna jak ta:Właściwości: Zastosowanie klucz jako zmiennej
key1= value1
key2= value2
key3= key1
Staram:
key3= {key1}
lub
key3= ${key1}
Ale to nie działa!
Masz pomysł?
chcę użyć klucza zdefiniowanego w pliku właściwości jako zmienna jak ta:Właściwości: Zastosowanie klucz jako zmiennej
key1= value1
key2= value2
key3= key1
Staram:
key3= {key1}
lub
key3= ${key1}
Ale to nie działa!
Masz pomysł?
Wbudowana klasa właściwości Java nie spełnia oczekiwań.
Ale są też inne biblioteki. Commons Configuration to taki, którego użyłem z pewnym powodzeniem. Klasa PropertiesConfiguration
spełnia dokładnie to, czego szukasz.
Więc może masz plik o nazwie my.properties
, który wygląda tak:
key1=value1
key2=Something and ${key1}
kod, który używa tego pliku może wyglądać następująco:
CompositeConfiguration config = new CompositeConfiguration();
config.addConfiguration(new SystemConfiguration());
config.addConfiguration(new PropertiesConfiguration("my.properties"));
String myValue = config.getString("key2");
myValue
będzie "Something and value1"
.
Po zdefiniowaniu wartości klucza w pliku właściwości, zostanie on przeanalizowany jako wartość literalna. Więc kiedy zdefiniujesz key3= ${key1}
, key3 będzie miało wartość "$ {key1}".
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Properties.html#load(java.io.InputStream)
zgadzam się z CSD, zwykły plik konfiguracyjny nie może być Twoim wyborem. Wolę za pomocą Apache Ant (http://ant.apache.org/), gdzie można zrobić coś takiego:
<property name="src.dir" value="src"/>
<property name="conf.dir" value="conf" />
Później, gdy chcesz użyć klucza „src.dir”, po prostu nazwać to coś takiego:
<dirset dir="${src.dir}"/>
Inną zaletą korzystania z Apache Ant jest możliwość załadowania pliku .properties do pliku kompilacji Ant. Wystarczy zaimportować go w ten sposób:
<loadproperties srcFile="file.properties"/>
.xmlNawet lepiej: skorzystaj z najnowszego Maven. Możesz zrobić kilka fajnych rzeczy z mavenem. W takim przypadku możesz utworzyć plik .properties z tymi liniami:
key1 = ${src1.dir}
key2 = ${src1.dir}/${filename}
key3 = ${project.basedir}
w pom.plik xml (umieszczony w katalogu głównym projektu) należy zrobić coś takiego:
<resources>
<resource>
<filtering>true</filtering>
<directory>just-path-to-the-properties-file-without-it</directory>
<includes>
<include>file-name-to-be-filtered</include>
</includes>
</resource>
</resources>
...
<properties>
<src1.dir>/home/root</src1.dir>
<filename>some-file-name</filename>
</properties>
W ten sposób można byłoby wartości klucze zmieniło się w czasie kompilacji, co oznacza, że po kompilacji trzeba będzie to wartości wewnątrz właściwościach plik:
key1 = /home/root
key2 = /home/root/some-file-name
key3 = the-path-to-your-project
skompilować z tej linii, gdy jesteś w tym samym katalogu co plik pom.xml: mvn czystej instalacji -DskipTests