كيف من المفترض أن أختار موقع ملفات التكوين في مشروع مخضرم

StackOverflow https://stackoverflow.com//questions/9613788

سؤال

أقوم بإنشاء أداة سطر أوامر تعتمد على بعض ملفات التكوين.

فيما يتعلق بالتطوير، أضع هذه الملفات تحت src/main/resources, ، والوصول إليها عن طريق getClass().getResourceAsStream("/config-file-name"), ، والذي يعمل بشكل جيد.

اخترت البرنامج المساعد maven-assembly لبناء الجرة بكل التبعيات.

    <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>com.myproject.Scheduler</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
               <execution>
                   <id>make-my-jar-with-dependencies</id>
                   <phase>package</phase>
                   <goals>
                       <goal>single</goal>
                   </goals>
               </execution>
            </executions>
    </plugin>       

ملفات التكوين كلها ملفوفة في جرة، ولكن أريد فصلها.

لذلك، أقوم بإضافة التكوين التالي،

    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>conf.properties</include>
            </includes>
            <filtering>true</filtering>
            <excludes>
                <exclude></exclude>
            </excludes>
        <targetPath>..</targetPath>             
        </resource>
    </resources>

بعد الانتهاء من ذلك، تكون ملفات التكوين جنبًا إلى جنب مع الجرة بدلاً من تغليفها في الجرة.

لكن الكود الخاص بي لا يمكنه الوصول إلى الملفات الآن.

هل أحتاج إلى تغيير طريقتي في الوصول إلى الملفات الموجودة في الكود؟

أم يجب أن لا أضع هذه الملفات فيها src/main/resources/, ، أي بديل؟

إذا كان شخص ما يعرف، الرجاء المساعدة.

شكرًا.


تحديث:أخيرًا، تخليت عن استخدام ملف الموارد maven، وبدلاً من ذلك، قمت بتعيين مسار الملف على نفس مسار jar افتراضيًا، كل شيء يعمل بشكل جيد باستثناء شكوى Eclipse.

نظرًا لأنني أرغب في نقل ملف التكوين من الجرة، ولا أريد أن يكون في مجلد الهدف/الفئات، لذلك أستخدمه <targetPath>..</targetPath> لنقل ملف التكوين إلى نفس الدليل مثل ملف jar.

عندما أقوم بإعادة إنشاء إعدادات مشروع Eclipse، يقول Eclipse:لا يمكن دمج مجلد الإخراج "project/target/test-classes" داخل مجلد الإخراج "project/target".

فليساعدني احد؟

هل كانت مفيدة؟

المحلول 3

لقد تخليت أخيرًا عن استخدام ملف الموارد maven، وقمت بتعيين مسار الملف على نفس المسار مثل jar افتراضيًا بدلاً من ذلك، كل شيء يعمل بشكل جيد باستثناء شكوى Eclipse.

(بما أنني أرغب في نقل ملف التكوين من الجرة، ولا أريد أن يكون في مجلد الهدف/الفئات، لذلك أستخدم ..لنقل ملف التكوين إلى نفس الدليل مثل ملف jar.عندما أقوم بإعادة إنشاء إعدادات مشروع Eclipse، يقول Eclipse:لا يمكن دمج مجلد الإخراج "project/target/test-classes" داخل مجلد الإخراج "project/target".)

لم أجد الحل حتى الآن، يبدو أن هناك خطأ في الكسوف.

الآن، تخليت عن Eclipse، وغيرت إلى IntelliJ IDEA، وهو IDE جميل جدًا، خاصة أنه متكامل تمامًا مع Maven.سأتجنب أي فرصة لاستخدام Eclipse في أي مشروع مخضرم.

نصائح أخرى

لا يمكن لتطبيقك الوصول إلى ملفات التكوين لأنه لم يعد موجودًا في مسار الفصل الخاص به.

إذا كنت تريد فصل ملفات التكوين الخاصة بك عن بقية التطبيق، فقد ترغب في إعادة النظر في ملف تنسيق التجميع.قد ترغب في استخدام bin بدلاً من jar-with-dependeency، على الرغم من أن ذلك يأتي مع تحديات التوزيع والاستخدام.

اعتمادًا على مدى تعقيد ملف الخاصية، يمكنك استخدام قدرة مرشح البرنامج الإضافي للمورد لتغيير القيمة بناءً على ملفات التعريف المخضرمة.على سبيل المثال، إذا أردت الحصول على خاصية باسم location، فيمكنك تحديد ملف تعريف التطوير والإنتاج، ثم تعيين القيمة إلى خاصية maven في pom (أو Profiles.xml إذا كنت تستخدم maven 2):

<properties>
  <my.location>the_real_value</my.location>
</properties>

ثم في ملف الخاصية يمكنك القيام بذلك:

location=${my.location}

فقط تأكد من تشغيل التصفية في بومك، كما يلي:

<resources>
  <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
  </resource>
</resources>

عندما تقوم بالإنشاء، إذا نظرت إلى الدليل الهدف، وعرضت ملف الخاصية هذا، فيجب أن ترى القيمة الصحيحة المستبدلة فيه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top