Ошибка журнала фабрики - PullRequest
0 голосов
/ 11 июля 2011

Я использую Hibernate на Eclipse и постоянно получаю следующее сообщение об ошибке при попытке компиляции:

build.xml: 39: java.lang.NoClassDefFoundError: org / apache / commons / logging / LogFactory

У меня есть файл commons-logging.jar в папке libs, а вот мой файл пути к классам:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
        <attributes>
            <attribute name="owner.project.facets" value="java"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v6.0">
        <attributes>
            <attribute name="owner.project.facets" value="jst.web"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
    <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
    <classpathentry kind="src" path="flex_src"/>
    <classpathentry kind="output" path="build/classes"/>
</classpath>

Я даже пытался напечатать путь к классу из файла build.xml, и там тоже появляется commons-logging.jar с правильным каталогом. Вот мой файл build.xml для дальнейшего использования:

<project name="project" default="main">
    <property file="build.properties" />
    <xmlproperty file="${project-root}/src/META-INF/persistence.xml" collapseAttributes="true" />
    <description>Generate CDB files</description>
    <target name="force">
        <property name="force.build" value="true" />
        <antcall target="mainInternal" />
    </target>
    <target name="main">
        <property name="force.build" value="false" />
        <antcall target="mainInternal" />
    </target>
    <target name="mainInternal">
        <antcall target="generateHibernateCfg" />
        <antcall target="compileEntities" />
        <antcall target="findAnnotations" />
        <antcall target="compileServiceInterfaces" />
        <antcall target="generateDTOs" />
        <antcall target="generateServices" />
        <antcall target="generateFlex" />
        <antcall target="generateBlazeDSConfig" />
    </target>
    <target name="generateHibernateCfg">
        <xslt in="${project-root}/src/META-INF/persistence.xml" style="${project-root}/cdb_build/src/hibernate.cfg.xsl" out="${project-root}/src/hibernate.cfg.xml" force="${force.build}" />
    </target>
    <target name="compileEntities">
        <path id="build.class.path">
            <fileset dir="${project-root}/WebContent/WEB-INF/lib" />
            <pathelement path="${classes-folder}" />
        </path>
        <pathconvert property="cp" refid="build.class.path" />
        <echo message="Classpath = ${cp}"/>
        <path id="srcfiles">
            <fileset dir="${project-root}/src">
                <include name="**/*.java" />
            </fileset>
        </path>
        <pathconvert property="srcfiles" refid="srcfiles" pathsep=" " />
        <script language="javascript">
            <![CDATA[
            var includes = "";
            var entitiesString = project.getProperty("persistence.persistence-unit.class");
            if (entitiesString) {
                var entities = entitiesString.split(",");
                for (entity in entities) {
                    if (entities[entity] != null && entities[entity] != "") {
                        includes += String(entities[entity]).replace(/\./g, '/') + ".java,";
                    }
                }
            }
            project.setProperty("entities.include", includes);
            ]]>
        </script>
        <mkdir dir="${project-root}/build/classes" />
        <javac includes="${entities.include}" srcdir="${project-root}/src" destdir="${classes-folder}" classpath="${cp}" debug="on" />
    </target>
    <target name="findAnnotations">
        <file name="annotated.xml" id="annotated.xml" />
        <echo file="annotated.xml" message="&lt;annotated-types/&gt;" />
        <path id="build.class.path">
            <fileset dir="${project-root}/WebContent/WEB-INF/lib" />
            <pathelement path="${classes-folder}" />
        </path>
        <pathconvert property="cp" refid="build.class.path" />
        <path id="srcfiles">
            <fileset dir="${project-root}/src">
                <include name="**/*.java" />
            </fileset>
        </path>
        <pathconvert property="srcfiles" refid="srcfiles" pathsep=" " />
        <path id="cfg-xml-path">
            <fileset file="${project-root}/src/hibernate.cfg.xml" />
        </path>
        <pathconvert property="cfg-xml" refid="cfg-xml-path" />
        <apt classpath="${cp}" 
            compile="false"
            factory="com.farata.cdb.annotations.processor.CDBFullAnnotationProcessor"
            srcdir="${project-root}/src"
            sourcepath="${project-root}/src">
            <option name="com.faratasystems.cdb.annotations.file" value="annotated.xml"/>
            <option name="com.faratasystems.cdb.configuration.file" value="${cfg-xml}"/>
            <include name="**/*.java"/>
        </apt>
    </target>
    <target name="compileServiceInterfaces">
        <path id="build.class.path">
            <fileset dir="${project-root}/WebContent/WEB-INF/lib" />
            <pathelement path="${classes-folder}" />
        </path>
        <pathconvert property="cp" refid="build.class.path" />
        <path id="srcfiles">
            <fileset dir="${project-root}/src">
                <include name="**/*.java" />
            </fileset>
        </path>
        <pathconvert property="srcfiles" refid="srcfiles" pathsep=" " />
        <xmlproperty file="annotated.xml" collapseAttributes="true" />
        <script language="javascript">
            <![CDATA[
            var includes = "";
            var typeNamesString = project.getProperty("annotated-types.annotated-type.name");
            if (typeNamesString) {
                var annotationNamesString = project.getProperty("annotated-types.annotated-type.annotations.annotation.name");
                var annotationNames = annotationNamesString.split(",");
                var typeNames = typeNamesString.split(",");
                for (annotationName in annotationNames) {
                    if (annotationNames[annotationName] != null && annotationNames[annotationName] != "") {
                        if (annotationNames[annotationName] == "clear.cdb.annotations.CX_Service") {
                            includes += String(typeNames[annotationName]).replace(/\./g, '/') + ".java,";
                        }
                    }
                }
            }
            project.setProperty("entities.include", includes);
            ]]>
        </script>
        <javac includes="${entities.include}" srcdir="${project-root}/src" destdir="${classes-folder}" classpath="${cp}" debug="on" />
    </target>
    <target name="generateDTOs">
        <xmlproperty file="annotated.xml" collapseAttributes="true" />
        <path id="build.class.path">
            <fileset dir="${project-root}/WebContent/WEB-INF/lib" />
            <pathelement path="${classes-folder}" />
        </path>
        <pathconvert property="cp" refid="build.class.path" />
        <path id="srcfiles">
            <fileset dir="${project-root}/src">
                <include name="**/*.java" />
            </fileset>
        </path>
        <pathconvert property="srcfiles" refid="srcfiles" pathsep=" " />
        <xslt classpathref="build.class.path" in="annotated.xml" style="src/service-dto-all.xsl" out="tmp.txt" force="true">
            <param name="outputFolder" expression="${project-root}src" />
            <param name="force" expression="${force.build}" />
        </xslt>
        <script language="javascript" src="${basedir}/scripts.js">
            <![CDATA[
                var includes = getServicesDTOs();
                includes += getServicesDTOSubclasses();
                project.setProperty("entities.include", includes == ""? "none":includes);
            ]]>
        </script>
        <javac includes="${entities.include}" srcdir="${project-root}/src" destdir="${classes-folder}" classpath="${cp}" debug="on" failonerror="false" />
    </target>
    <target name="generateServices">
        <xmlproperty file="annotated.xml" collapseAttributes="true" />
        <path id="build.class.path">
            <fileset dir="${project-root}/WebContent/WEB-INF/lib" />
            <pathelement path="${classes-folder}" />
        </path>
        <pathconvert property="cp" refid="build.class.path" />
        <path id="srcfiles">
            <fileset dir="${project-root}/src">
                <include name="**/*.java" />
            </fileset>
        </path>
        <pathconvert property="srcfiles" refid="srcfiles" pathsep=" " />
        <xslt classpathref="build.class.path" in="annotated.xml" style="src/service-impl-all.xsl" out="tmp.txt" force="true">
            <param name="outputFolder" expression="${project-root}src" />
            <param name="force" expression="${force.build}" />
        </xslt>
        <script language="javascript" src="${basedir}/scripts.js">
            <![CDATA[
            var includes = getServices();
            includes += getServicesSubclasses();
            project.setProperty("entities.include", includes == ""? "none":includes);
            ]]>
        </script>
        <javac includes="${entities.include}" srcdir="${project-root}/src" destdir="${classes-folder}" classpath="${cp}" debug="on" />
    </target>
    <target name="generateFlex">
        <xmlproperty file="annotated.xml" collapseAttributes="true" />
        <path id="build.class.path">
            <fileset dir="${project-root}/WebContent/WEB-INF/lib" />
            <pathelement path="${classes-folder}" />
        </path>
        <pathconvert property="cp" refid="build.class.path" />
        <path id="srcfiles">
            <fileset dir="${project-root}/src">
                <include name="**/*.java" />
            </fileset>
        </path>
        <pathconvert property="srcfiles" refid="srcfiles" pathsep=" " />
        <xslt classpathref="build.class.path" in="annotated.xml" style="flex_src/flex-all.xsl" out="tmp.txt" force="true">
            <param name="flexOutputFolder" expression="${flex-output-folder}" />
            <param name="javaSrcFolder" expression="${project-root}src" />
            <param name="force" expression="${force.build}" />
        </xslt>
        <xslt classpathref="build.class.path" in="annotated.xml" style="flex_src/application-all.xsl" out="tmp.txt" force="true">
            <param name="javaSrcFolder" expression="${project-root}src" />
            <param name="testFolder" expression="${project-root}test" />
            <param name="force" expression="${force.build}" />
        </xslt>
    </target>
    <target name="generateBlazeDSConfig">
        <xmlproperty file="annotated.xml" collapseAttributes="true" />
        <path id="build.class.path">
            <fileset dir="${project-root}/WebContent/WEB-INF/lib" />
            <pathelement path="${classes-folder}" />
        </path>
        <pathconvert property="cp" refid="build.class.path" />
        <path id="srcfiles">
            <fileset dir="${project-root}/src">
                <include name="**/*.java" />
            </fileset>
        </path>
        <pathconvert property="srcfiles" refid="srcfiles" pathsep=" " />
        <script language="javascript" src="${basedir}/scripts.js">
            <![CDATA[
            generateRemotingConfig();
            generateMessagingConfig();
            ]]>
        </script>
    </target>
</project>

Ответы [ 2 ]

0 голосов
/ 11 июля 2011

Похоже, вы опубликовали содержимое файла метаданных .classpath Eclipse, в котором определяется путь к классу, который Eclipse использует при создании проекта в Eclipse , но вы также упоминаете использование build.xml, что подразумевает, что вы также с помощью Ant для создания проекта извне из IDE.

Убедитесь, что ваши <javac> задачи в build.xml также относятся к commons-logging.jar; файл .classpath не будет использоваться Ant, если вы каким-либо образом не настроили скрипт сборки для этого (возможно, путем создания build.xml из Eclipse).

0 голосов
/ 11 июля 2011

Я думаю, вам, возможно, придется предоставить более подробную информацию о структуре вашего проекта.Как вы упаковали свой проект?(Содержит ли оно ухо с упакованным модулем ejb ...)

Очевидно, это проблема загрузки класса.Или возможно, что jar не упакован с окончательным развертываемым архивом.Самым простым решением для вашего решения является копирование и вставка файла common-logging.jar в каталог lib вашего сервера.(для tomcat я считаю, что это в папке catalina_home .. но я не уверен)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...