【问题标题】:Executable jar not reading .properties file ( Build.xml)可执行 jar 不读取 .properties 文件 (Build.xml)
【发布时间】:2020-07-31 21:14:42
【问题描述】:

我已经编写了一个 java 代码,它在 eclipse 上运行良好并读取了所有必要的文件。

该项目包含一个属性文件和一个用作图标的 png 图像。

之后,我在 build.xml 中为它创建了一个构建脚本。

使用ant构建工具编译成功。

当我执行 jar 时,它不会加载我的图像和属性文件。

Build.xml

<?xml version="1.0" encoding="UTF-8"?>

<project name="EncryptionUtility" default="deploy" basedir=".">
<property environment="env" />
<property file="build.properties"/>
<path id="classpath">
<fileset dir="${lib.path.all}">      
<include name="*.jar" />    
<include name="*.zip" />
</fileset>
<pathelement location="${build.dir}" />
</path>
<property name="build.classpath" refid="classpath" />
<target name="prepare">
    <delete includeemptydirs="true">
        <fileset dir="${build.dir}" includes="**/*"/>
      </delete>
<mkdir dir="${build.dir}" />
<mkdir dir="${build.dir}/classes" />
</target>
<target name="compile" depends="prepare">
<javac srcdir="${src.dir}" destdir="${build.dir}/classes" debug="on" includes="**/*.java">
<classpath refid="classpath" />
</javac>

</target>

<target name="jar" depends="compile">
    <copy file="${src.dir}/encryption.properties" todir="${build.dir}" />
    <copy file="${src.dir}/keyicon.png" todir="${build.dir}" />
    <copy file="${src.dir}/key.dat" todir="${build.dir}" />
    <copy file="${src.dir}/pass.dat" todir="${build.dir}" />
    <jar destfile="${build.dir}/EncryptionUtility.jar">
        <manifest>
            <attribute name="Class-Path" value="lib/bcprov-jdk16-146.jar" />
                        <attribute name="Main-Class" value="EncryptionUtility"/>
        </manifest>
    <fileset dir="${build.dir}/classes">
        <include name="**/*.class" />
        <include name="encryption.properties" />
    </fileset>
    </jar>
</target>

 <target name="deploy" depends="jar">
    <copy file="${build.dir}/EncryptionUtility.jar" todir="${deploy.dir}" />
 </target>
 <target name="clean">      
 <delete file="${build.dir}" />      
 </target>
 </project>

.properties 文件

keyStorePassword=pass.dat
keyStoreKey=key.dat
#keyStorePassword=C:\\Users\\imjme1\\Desktop\\Work_backup\\FMS\\EPM_FILE_ENCRYPTION\\NIFT_SOLUTION\\files\\keyStorePass.dat
#keyStoreKey=C:\\Users\\imjme1\\Desktop\\Work_backup\\FMS\\EPM_FILE_ENCRYPTION\\NIFT_SOLUTION\\files\\keyStoreKey.dat

加载图片

// Set the icon of the utility..
ImageIcon icon = new ImageIcon(this.getClass().getResource( "keyicon.png" ) );
Image image = icon.getImage();
Image scaledImage = image.getScaledInstance(120, 120,  java.awt.Image.SCALE_SMOOTH); // scale it the smooth way  
frame.setIconImage( scaledImage );

读取 .properties 文件

public static String configFile;
public static CommonUtil config;
public static String propertyFileName = "/encryption.properties";
public static Properties properties = new Properties();

// static block to load the property file and assign values from it..
    static {

        config = new CommonUtil();

        try {

            config.init(propertyFileName);

        } catch (Exception io) {

            io.printStackTrace();

        }

    }

    // Initialize the variables for key store credentials and set values from config file..
    public void init( String configFileName ) throws Exception {

        CommonUtil.configFile = configFileName;

        InputStream configFile = CommonUtil.class.getResourceAsStream( configFileName );

        properties.load( configFile );

        keyStorePass           = properties.getProperty( "keyStorePassword" );
        keyStoreKey            = properties.getProperty( "keyStoreKey" ); 

    }

Build.properties 文件

src.dir=C:/Users/imjme1/fms-file-encrytion/RTA_ENCRYPTION_UTILITY/src
build.dir=${basedir}/build
deploy.dir=${basedir}/deploy
lib.path.all=${basedir}/libs

【问题讨论】:

    标签: java ant


    【解决方案1】:

    您可以将所有资源文件保存在 jar 的 pwd 中。

    例如,我正在从 build.xml 中读取 build.properties 中的属性,所以我的目录结构将是:

    .
    myapp.jar
    build.xml
    build.properties
    

    【讨论】:

      【解决方案2】:

      我认为资源必须在 ${build.dir}/classes 目录中。 当您将它们复制到 ${build.dir} 目录时。
      在 build.xml 中您必须更改

      【讨论】:

      • 所以我要把它们放在 ${build.dir}/classes 中?
      猜你喜欢
      • 2011-10-04
      • 2010-11-15
      • 2015-09-04
      • 2012-06-25
      • 2020-11-22
      • 1970-01-01
      • 2020-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多