В моем проекте у меня есть файл свойств, который я использую для установки уровня ведения журнала. Теперь, когда я экспортирую свой проект в качестве банки и использую его для запуска проекта на удаленном компьютере (linux), я не могу установить уровень. Есть ли способ сохранить файл свойств за пределами файла jar таким образом, чтобы я мог установить уровень и заставить jar читать этот файл свойств. (Предпочитают использовать переменное окружение)java.util.logger.Logging: сохранение файла logger.properties за пределами файла jar
ответ
Есть несколько способов для достижения этой цели, например:
- Настройка IDE экспортировать ресурсы за пределами ЕАО: обычно я не считаю этот вариант поскольку конкретные решение зависит от IDE разработчика
- использовать общий сборки инструмента, например, Ant, и указать в
build.xml
файла, файлы свойств должны быть упакованы вне баночке - Inte тереть свой проект с Maven и настроить цель пакета для того, чтобы скопировать некоторые специфические свойства файла вне баночку
Из вашего вопроса я думаю, вы экспортируете JAR из вашего IDE, но, как я уже говорил выше решения зависит по IDE. По этой причине, чтобы принять независимое решение IDE, я бы предложил использовать Ant. Это позволит вам решить эту и многие подобные проблемы, которые могут возникнуть в будущем.
Вы можете получить Ant here: просто загрузите и распакуйте его в любой папке, это займет пару минут. Затем добавьте ссылку на каталог Ant bin
в свою переменную PATH (не обязательно, но рекомендуется) и создайте образец build.xml
. Вот это пример шаблона:
<project name="template" default="compile" basedir=".">
<description>Build file template</description>
<property name="project.name" value="myProject"/>
<property name="driver.log" value="log4j-1.2.15.jar"/>
<property name="driver.database" value="ojdbc6.jar"/>
<property name="library.home" value="lib"/>
<property name="env.type" value="dev"/>
<property name="src.version" value="Demo" />
<property name="src.folder" value="root/folder/template"/>
<property name="src.package" value="root.folder.template"/>
<property name="src.home" value="${basedir}/src/${src.folder}"/>
<property name="dist.home" value="${basedir}/dist"/>
<property name="build.home" value="${basedir}/build"/>
<property name="docs.home" value="${basedir}/docs"/>
<!-- Setting the classpath necessary to compile -->
<path id="compile.classpath">
<pathelement location="${library.home}/${driver.log}"/>
<pathelement location="${library.home}/${driver.database}"/>
</path>
<!-- DELETE the class files from the ${build.home} directory tree -->
<target name="clean" description="Clean up the build folder">
<delete dir="${build.home}"/>
<delete dir="${dist.home}"/>
</target>
<!-- CREATE the build directory structure used by compile -->
<target name="init" description="Creates the necessary directories">
<mkdir dir="${dist.home}"/>
<mkdir dir="${build.home}"/>
</target>
<!-- COMPILE the project and copy all necessary resources -->
<!-- Options: <compilerarg value="-Xlint"/> -->
<target name="compile" depends="init" description="Compile the sources">
<javac srcdir="${src.home}" destdir="${build.home}" includeantruntime="false">
<classpath refid="compile.classpath"/>
</javac>
<copy todir="${build.home}/${src.folder}/resources">
<fileset dir="${src.home}/resources">
<include name="messages_list.properties"/>
<include name="messages_list_en.properties"/>
</fileset>
</copy>
<copy file="${src.home}/resources/log4j_${env.type}.properties" tofile="${build.home}/${src.folder}/resources/log4j_${project.name}.properties"/>
<copy file="${src.home}/resources/configuration_${env.type}.properties" tofile="${build.home}/${src.folder}/resources/${project.name}_config.properties"/>
</target>
<!-- Creates the DISTRIBUTABLE JAR package and add 3d part libraries -->
<target name="dist" description="Create the distributable JAR archive">
<jar destfile="${dist.home}/${project.name}.jar">
<fileset dir="${build.home}">
<exclude name="place_holder\"/>
</fileset>
<!-- Setting MANIFEST properties -->
<manifest>
<section name="${ant.project.name} - ver. ${src.version}">
<attribute name="Built_By" value="${user.name}"/>
<attribute name="Created" value="${ts}"/>
</section>
<attribute name="Main-Class" value="package.mine.MainClass"/>
<attribute name="Class-Path" value=". lib/${driver.log} lib/${driver.database}"/>
</manifest>
</jar>
<!-- Adding third part libraries -->
<mkdir dir="${dist.home}/lib"/>
<copy file="${library.home}/${driver.database}" todir="${dist.home}/lib"/>
<copy file="${library.home}/${driver.log}" todir="${dist.home}/lib"/>
</target>
<tstamp><format property="ts" pattern="dd/MM/yyyy HH:mm:ss" /></tstamp>
</project>
Примечание: в шаблон выше, вы должен заменить образцы баночек (log4j и драйвер OJDBC) с фактическими БАНКАМИ, необходимых вашим проектом. Затем вы можете настроить задачу , чтобы разместить файлы свойств по своему желанию. Вы можете скопировать эти файлы в любой каталог, который вам нравится, если такой путь появляется в пути к классам приложения.