(...) मैं काफी यकीन है कि यह किया जा सकता है, उदाहरण के लिए कर रहा हूँ antrun प्लगइन के माध्यम से, लेकिन मैं उससे परिचित नहीं हूँ। इसे प्राप्त करने का सबसे आसान तरीका क्या है?
आप वास्तव में resources:copy-resources
इस्तेमाल कर सकते हैं और कई <execution>
अपने पोम (ध्यान दें कि resources:copy-resources
हालांकि लक्ष्य फ़ाइल का नाम बदलने के लिए अनुमति नहीं है)।
मान लेते हैं तो आपको निम्न संरचना है दो:
$ tree .
.
├── pom.xml
└── src
├── main
│ ├── filters
│ │ ├── filter-node1.properties
│ │ └── filter-node2.properties
│ ├── java
│ └── resources
│ ├── log4j.properties
│ └── another.xml
└── test
└── java
कहाँ log4j.properties
जगह धारकों और filter-nodeN.properties
फ़ाइलों का उपयोग कर रहा है मान हैं।उदाहरण के लिए:
# filter-node1.properties
log.location=D:/logs
log.file.postfix=_1
फिर, अपने pom.xml
में, संसाधनों प्लगइन कॉन्फ़िगर और उपयोग करने के लिए एक विशिष्ट उत्पादन निर्देशिका और एक विशेष फिल्टर के साथ copy-resources
कॉल करने के लिए एक <execution>
प्रति नोड को परिभाषित:
<project>
...
<build>
<resources>
<!-- this is for "normal" resources processing -->
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering><!-- you might still want to filter them -->
<excludes>
<!-- we exclude the file from "normal" resource processing -->
<exclude>**/log4j.properties</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<id>copy-resources-node1</id>
<phase>process-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/node1</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/log4j.properties</include>
</includes>
</resource>
</resources>
<filters>
<filter>src/main/filters/filter-node1.properties</filter>
</filters>
</configuration>
</execution>
<execution>
<id>copy-resources-node2</id>
<phase>process-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/node2</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/log4j.properties</include>
</includes>
</resource>
</resources>
<filters>
<filter>src/main/filters/filter-node2.properties</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
चल mvn process-resources
निम्नलिखित परिणाम उत्पन्न करेगा:
$ tree .
.
├── pom.xml
├── src
│ ├── main
│ │ ├── filters
│ │ │ ├── filter-node1.properties
│ │ │ └── filter-node2.properties
│ │ ├── java
│ │ └── resources
│ │ ├── log4j.properties
│ │ └── another.xml
│ └── test
│ └── java
└── target
├── classes
│ └── another.xml
├── node1
│ └── log4j.properties
└── node2
└── log4j.properties
प्रत्येक 01 में उपयुक्त मानों के साथ।
$ cat target/node1/log4j.properties
log4j.appender.Application.File=D:/logs/application_1.log
log4j.appender.tx_info.File=D:/logs/tx_info_1.log
इस थोड़े से काम करता है, लेकिन अत्यधिक शब्द है और यदि आप नोड्स के एक सभ्य राशि यह एक समस्या हो सकती है।
मैं अधिक संक्षिप्त कुछ लिख सकते हैं और Maven AntRun प्लगइन का उपयोग कर अनुरक्षणीय करने की कोशिश की, लेकिन मैं नहीं
for
कार्य
ant-contrib
से Maven के तहत काम करने के लिए (किसी अज्ञात कारण से हो सकता है,
for
कार्य मान्यता प्राप्त नहीं है) और मैंने
छोड़ दिया।
यहां मैवेन एंटररन प्लगइन का उपयोग करने का एक विकल्प है। कुछ भी नहीं जटिल है, कोई पाश, मैं सिर्फ, किसी अन्य स्थान पर स्रोत फ़ाइल को कॉपी कर रहा हूँ मक्खी पर उसका नाम बदल रहा है और सामग्री को छानने: (टोकन के लिए डिलीमीटर के रूप में डिफ़ॉल्ट रूप से
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>copy-resources-all-nodes</id>
<phase>process-resources</phase>
<configuration>
<tasks>
<copy file="src/main/resources/log4j.properties" toFile="target/antrun/log4j-node1.properties">
<filterset>
<filter token="log.location" value="D:/logs"/>
<filter token="log.file.postfix" value="_1"/>
</filterset>
</copy>
<copy file="src/main/resources/log4j.properties" toFile="target/antrun/log4j-node2.properties">
<filterset>
<filter token="log.location" value="D:/logs"/>
<filter token="log.file.postfix" value="_2"/>
</filterset>
</copy>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
ध्यान दें कि चींटी का उपयोग करता @
नहीं कर सके ' (था के बाद से इन मूल्यों, आप प्रणाली के बजाय गुण का उपयोग कर विचार किया विशिष्ट नोड होने लगते हैं,
[email protected]@/[email protected]@.log
[email protected]@/[email protected]@.log
लेकिन: टी यह Maven शैली सीमांकक उपयोग करने के लिए) ताकि log4j.properties
बन गया आप स्टार्टअप स्क्रिप्ट में रख सकते हैं)? यह कुछ ऐसा है जो मैंने पहले ही किया है (log4j.xml
के साथ), यह अच्छी तरह से काम करता है और यह चीजों को अत्यधिक सरल बना देगा।
विचारों के लिए धन्यवाद।संसाधनों का उपयोग करना: प्रति-संसाधन, क्या अलग-अलग गुणों के साथ अलग-अलग लक्ष्यों को एक ही फ़ाइल_ एकाधिक बार कॉपी करना संभव नहीं होगा? हालांकि, मैं अलग-अलग निष्पादन के लिए गुणों को कॉन्फ़िगर करने का तरीका नहीं समझ पाया - क्या आप मुझे एक ठोस उदाहरण के बारे में बता सकते हैं? –
आप अपने पोम में कई बार प्रति-संसाधन लक्ष्य का आह्वान कर सकते हैं, प्रत्येक बार एक ही स्रोत को अलग-अलग लक्ष्य निर्दिष्ट करते हैं। मुझे नहीं पता कि प्रति-संसाधन फ़ाइलों का नाम बदलने की अनुमति देता है, लेकिन यह लक्ष्य निर्देशिका को सेट करने की अनुमति देता है। सूरज चमक रहा है - मुझे बगीचे में काम करना है, लेकिन मैं बाद में कुछ ठोस बनाने की कोशिश करूंगा। – mdma