2016-03-01 44 views
0

在我的項目中,我有一個屬性文件,用於設置日誌級別。現在,當我將項目導出爲jar並使用它在遠程計算機(linux)上運行項目時,我無法設置關卡。有沒有辦法將屬性文件保存在jar文件之外,以便我可以設置關卡並使jar讀取該屬性文件。 (首選使用環境變量)java.util.logger.Logging:在jar文件之外保留logger.properties文件

回答

0

有幾種方式來實現這一點,例如:

  • 配置您的IDE出口資源的JAR外:我通常不考慮,因爲具體該選項解決方案取決於由開發者的IDE
  • 使用通用構建工具,例如螞蟻,並在build.xml文件,該文件的屬性文件應封裝罐
  • INTE外指定與Maven的篦項目和自定義,以複製一些特定的屬性文件以外的罐子

從你的問題我猜你是出口從IDE的JAR包的目標,但我解決上述依賴由IDE。出於這個原因,爲了採用獨立於IDE的解決方案,我建議使用Ant。這可以讓你解決這個問題以及將來可能出現的許多類似問題。

您可以獲得Ant here:只需下載並將其解包到任何文件夾中,需要幾分鐘的時間。然後在PATH變量中添加一個對Ant bin目錄的引用(並非嚴格必要,但建議),並創建一個示例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驅動程序)與您的項目所需的實際罐。然後,您可以自定義副本任務,以便將屬性文件放置在所需的位置。您可以將這些文件複製到您喜歡的任何目錄中,只要此類路徑出現在應用程序的類路徑中即可。