Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ANT创建jar文件,给出getResource+;编码_Java_Ant_Encoding_Build_Jar - Fatal编程技术网

Java ANT创建jar文件,给出getResource+;编码

Java ANT创建jar文件,给出getResource+;编码,java,ant,encoding,build,jar,Java,Ant,Encoding,Build,Jar,我正在创建build.xml文件以使用ant构建jar 除了像图像这样的外部资源外,一切都是完美的 我想做的就是理解如何以正确的方式创建jar。实际上,我的代码是: 我知道问题出在包含以下内容的每一行上: this.getClass().getResource(“/img/logo150.png”) (我对舒尔很满意,因为我单独用日志记录和调试对每一个进行了测试,问题就在于此) 但我不明白为什么。我尝试了上百种可能性,对jar进行了许多不同的设置,在stackoverflow中尝试了许多不同的答

我正在创建build.xml文件以使用ant构建jar

除了像图像这样的外部资源外,一切都是完美的

我想做的就是理解如何以正确的方式创建jar。实际上,我的代码是:

我知道问题出在包含以下内容的每一行上: this.getClass().getResource(“/img/logo150.png”) (我对舒尔很满意,因为我单独用日志记录和调试对每一个进行了测试,问题就在于此)

但我不明白为什么。我尝试了上百种可能性,对jar进行了许多不同的设置,在stackoverflow中尝试了许多不同的答案,但没有一个解决方案奏效

我正在使用eclipse,文件夹结构为:

src -> source code
res -> img -> images
res -> config.files.txt
db -> database files
lib -> libs
你知道吗?如果我运行项目,代码可以完美地工作,但是当我运行ant构建(RunAs)时,它就不工作了

编辑:哦,是的,我终于可以发布代码了

<?xml version="1.0" encoding="UTF-8"?>
<project name="Garby Gestore Clienti" default="try_jar" basedir=".">
    <description>
    This buildfile is used to build the jar of the program.
    </description>

    <!-- ================== Property Definitions ===================== -->
    <property file="${user.home}/Garby.properties" />
    <property file="${user.home}/.Garby.properties" />
    <property file="${basedir}/Garby.properties" />

    <!-- ================= File and Directory Names ==================== -->
    <property name="src" location="${basedir}/src" />
    <property name="build" location="${basedir}/build" />
    <property name="dist" location="${basedir}/dist" />
    <property name="app.name" value="Garby" />
    <property name="dist.jarHome" value="${user.home}/Garby" />
    <property name="app.version" value="1.0" />
    <tstamp />
    <property name="jar.name" value="${app.name}_${app.version}.${DSTAMP}.jar" />
    <property name="jar.completePath" value="${dist.jarHome}/${jar.name}" />



    <!-- Here you must specify the directory in which jar files needed by this plugin to run are stored  -->

    <property name="shared.lib" value="${basedir}/lib" />

    <!-- =============== Custom Ant Task Definitions =================== -->
    <property name="compile.debug" value="true" />
    <property name="compile.deprecation" value="false" />
    <property name="compile.optimize" value="true" />

    <!-- ================== External Dependencies ======================= -->
    <property name="Database" value="hsqldb.jar" />

    <!-- ================== Compilation Classpath ======================= -->

    <path id="compile.classpath">
        <!--<pathelement location="${src.home}"/>-->
        <fileset dir="${src}">
            <include name="**/*.java" />
        </fileset>
        <fileset dir="${shared.lib}">
            <include name="**/*.jar" />
        </fileset>
    </path>

    <!-- =================== All Target ================================ -->

    <!-- ================== Try_jar Target ============================ -->
    <target name="try_jar" depends="compile, dist, signjar, clean_class_files, run" description="Clean build and dist directories, then compile, create and sign jar and finally run Core.jar" />

    <!-- ================== Clean Target ============================== -->

    <target name="clean" description="Delete old build and dist directories">
        <delete dir="${build}" />
        <delete dir="${dist}" />
    </target>

    <!-- ================== Prepare Target ============================= -->

    <target name="prepare" depends="clean">
        <mkdir dir="${build}" />
        <mkdir dir="${build}/classes" />
        <mkdir dir="${build}/lib" />
        <copy todir="${build}/lib">
            <fileset dir="${shared.lib}" includes="${Database}" />
        </copy>
    </target>

    <!-- ================== Compile Target =========================== -->

    <target name="compile" depends="prepare" description="Compile Java sources">

        <mkdir dir="${build}/classes" />
        <javac srcdir="${src}" destdir="${build}/classes" encoding="8859_1" debug="${compile.debug}" deprecation="${compile.deprecation}" optimize="${compile.optimize}" source="1.7" target="1.7">
            <classpath refid="compile.classpath" />
        </javac>
    </target>

    <!-- =================== Dist Target ================================ -->
    <target name="dist" description="Creates Jar archive">
        <!-- Create the time stamp -->
        <tstamp>
            <format property="compile.timestamp" pattern="yyyyMMddHHmm" />
        </tstamp>
        <!-- update core version in manifest -->
        <replaceregexp file="${basedir}/manifest" match="Implementation-Version: .*" replace="Implementation-Version: ${app.version}.${compile.timestamp}" />
        <!-- Create Jar file -->
        <jar destfile="${jar.completePath}" manifest="${basedir}/manifest">
            <fileset dir="${build}/classes" excludes="**/*.bak" />
            <fileset dir="${basedir}/bin"/>
            <zipfileset src="${shared.lib}/${Database}" />
        </jar>

        <copy todir="${dist.jarHome}/db">
            <fileset dir="${basedir}/db" includes="**" />
        </copy>
        <copy todir="${dist.jarHome}/res">
            <fileset dir="${basedir}/res" includes="**" />
        </copy>


    </target>

    <!-- ================== SignJar Target ============================ -->
    <target name="signjar" description="Signs jar with keystore taken from your shared.lib folder">
        <!--<signjar jar="${jar.completePath}" keystore="${shared.lib}/paripari.jks" alias="irc" storepass="${keystore.password}" keypass="${private.password}"/>-->
    </target>

    <!-- ================== Javadoc Target ============================ -->

    <target name="javadoc" depends="compile" description="Create Javadoc API documentation">

        <mkdir dir="${dist}/docs/api" />
        <javadoc sourcepath="${src}" destdir="${dist}/docs/api" packagenames="*">
            <classpath refid="compile.classpath" />
        </javadoc>

    </target>

    <!-- ================== RmBak Target ============================= -->

    <target name="rmbak" description="Delete *.bak files everywhere">

        <delete>
            <fileset dir="${docs}" includes="**/*.bak" />
            <fileset dir="${src}" includes="**/*.bak" />
        </delete>

    </target>

    <!-- ================== RmLog Target ============================= -->

    <target name="rmlog" description="Delete *.log files from build directory">

        <delete>
            <fileset dir="${build.home}" includes="**/*.log*" />
        </delete>

    </target>
    <!-- =================== Delete .class Target===================== -->
    <target name="clean_class_files" description="Delete .class files stored inside build directory and dist folder">
        <delete dir="${build}" />
        <delete dir="${dist}" />
    </target>

    <!-- ================== Run Target =============================== -->
    <target name="run" description="Run Garby">
        <java jar="${jar.completePath}" fork="true">
        </java>
    </target>

</project>
这句话不是我写的。但是我在编码方面有问题(在罐子里我看不到euro simbol),我应该设置什么样的值

第三


java项目(在eclipse中也是如此)是否有任何“正确”或“标准”的文件夹结构,或者我的文件夹结构是否良好?(还有许多不同的路径)

使用如下方式:

<copy todir="${yourJarFolder}/folder">
    <fileset dir="${basedir}/folder" includes="**" />
</copy>

这段代码将工作区中的文件夹直接复制到jar的文件夹中,而不是在jar中,而是在同一个文件夹中

之后,您可以使用标准方法(不使用getResource())访问任何资源


希望对您有用。

无法下载该文件,它需要一个帐户。包括
ant build
的输出,至少包括带有错误消息的部分。没有错误,唯一的问题是getResource无法加载该文件。我解决了部分问题,在标记内添加了一个。现在程序可以读取用getClass()调用的内部资源。getResource()。我现在的问题是读取不在jar文件中的资源。有什么想法吗?
<copy todir="${yourJarFolder}/folder">
    <fileset dir="${basedir}/folder" includes="**" />
</copy>