0

Maven リポジトリからプルした jar ファイルが Java クラスパスに配置されていないようです。アイビーキャッシュがこれを処理したと思いましたか?

クラスをEclipse内またはEclipse外で実行すると、NoClassDefFoundErrorが発生します。正常にコンパイルされますが、実行時に機能しません。私の依存関係confはruntime->defaultに設定されているので、これでうまくいくと思いました。

以下は私が使用しているファイルです。私は何か間違ったことをしていますか?

アイビー.xml

<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:m="http://ant.apache.org/ivy/maven"
            xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
    <info organisation="org_test" module="mod_test" />
    <configurations>
    <conf name="compile" description="Required to compile application" />
    <conf name="runtime" description="Additional run-time dependencies" extends="compile" />
    <conf name="test" description="Required for test only" extends="runtime" />
    </configurations>
    <publications>
        <artifact ext="jar" />
        <artifact ext="pom" />
    </publications>
    <dependencies>
        <dependency org="org.apache.solr" name="solr-core" rev="3.5.0" conf="runtime->default" />
        <dependency org="org.apache.solr" name="solr-solrj" rev="3.6.0" conf="runtime->default" />
    </dependencies>
</ivy-module>

ivysettings.xml

<?xml version="1.0" encoding="UTF-8"?>
<ivysettings>
    <settings defaultResolver="chained" />
    <property name="maven.pattern" value="[organisation]/[module]/[revision]/[module]-[revision](-[classifier]).[ext]" />
    <property name="public.repo.url" value="http://${repo.host}:${repo.port}/nexus/content/groups/public/" override="false" />
    <property name="repo.host" value="localhost" override="false" />
    <property name="repo.port" value="8081" override="false" />
    <property name="repo.path" value="nexus/content/repositories" override="false" />
    <property name="retrieve.resolver" value="chained" override="false" />
    <resolvers>
        <ibiblio name="public" m2compatible="true" root="${public.repo.url}" />
        <chain name="chained" returnFirst="false">
            <resolver ref="public" />
        </chain>
    </resolvers>
</ivysettings>

common.xml

<project name="common" xmlns:ivy="antlib:org.apache.ivy.ant">

    <dirname property="ivy-support.build.dir" file="${ant.file.ivy-support}" />
    <property name="ivy-support.lib.dir" location="${ivy-support.build.dir}/ivy" />
    <property name="ivy.settings.filename" value="ivysettings.xml" />

    <property name="ivy.install.version" value="2.1.0-rc2" />
    <condition property="ivy.home" value="${env.IVY_HOME}">
      <isset property="env.IVY_HOME" />
    </condition>
    <property name="ivy.home" value="${user.home}/.ant" />
    <property name="ivy.jar.dir" value="${ivy.home}/lib" />
    <property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar" />

    <target name="download-ivy" unless="offline">

        <mkdir dir="${ivy.jar.dir}"/>
        <!-- download Ivy from web site so that it can be used even without any special installation -->
        <get src="http://repo2.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar" 
             dest="${ivy.jar.file}" usetimestamp="true"/>
    </target>

    <target name="init-ivy" depends="download-ivy">
      <!-- try to load ivy here from ivy home, in case the user has not already dropped
              it into ant's lib dir (note that the latter copy will always take precedence).
              We will not fail as long as local lib dir exists (it may be empty) and
              ivy is in at least one of ant's lib dir or the local lib dir. -->
        <path id="ivy.lib.path">
            <fileset dir="${ivy.jar.dir}" includes="*.jar"/>
        </path>
        <taskdef resource="org/apache/ivy/ant/antlib.xml"
                 uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/>
    </target>


    <path id="ivy.lib.path">
        <fileset dir="${ivy-support.lib.dir}" includes="*.jar" />
    </path>
    <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path" loaderref="ivy.lib.loader" />

    <ivy:settings file="${ivy-support.build.dir}/${ivy.settings.filename}" />

    <property name="should.clean.ivy.cache" value="false" />

    <dirname property="ivy-support.build.dir" file="${ant.file.ivy-support}" />
    <property name="ivy-support.lib.dir" location="${ivy-support.build.dir}/ivy" />
    <property name="ivy.settings.filename" value="ivysettings.xml" />

    <path id="ivy.lib.path">
        <fileset dir="${ivy-support.lib.dir}" includes="*.jar" />
    </path>
    <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path" loaderref="ivy.lib.loader" />

    <ivy:settings file="${ivy-support.build.dir}/${ivy.settings.filename}" />

    <target name="clean-ivy-cache" if="clean.ivy.cache.istrue">
        <ivy:cleancache />
    </target>
</project>

build.xml

<project name="main" xmlns:ivy="antlib:org.apache.ivy.ant" default="compile">
    <description>Testing Script</description>
    <import file="common.xml" />

    <!--
    ================
    Build properties
    ================
    -->
    <property name="src.dir" location="src/org"/>
    <property name="build.dir" location="build"/>
    <property name="classes.dir" location="${build.dir}/classes"/>
    <property name="test.classes.dir" location="${build.dir}/test-classes"/>
    <property name="ivy.reports.dir"  location="${build.dir}/ivy-reports"/>
    <property name="test.reports.dir"  location="${build.dir}/test-reports"/>

    <!--
    ===========
    Build setup
    ===========
    -->
    <target name="init">
        <ivy:resolve file="ivy.xml" />

        <ivy:report todir='${ivy.reports.dir}' graph='false' xml='false'/>

        <ivy:cachepath pathid="compile.path" conf="compile"/>
        <ivy:cachepath pathid="runtime.path" conf="runtime"/>
        <ivy:cachepath pathid="test.path"    conf="test"/>

        <mkdir dir="${classes.dir}"/>
        <mkdir dir="${test.classes.dir}"/>
        <mkdir dir="${test.reports.dir}"/>
    </target>

    <!--
    ===============
    Compile target
    ===============
    -->
    <target name="compile" depends="init">
        <javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="true" debug="true" classpathref="runtime.path"/>
    </target>

    <!--
    =====================
    Build and run targets
    =====================
    -->
    <target name="run" depends="init-ivy">
        <java classname="org">
            <classpath>
                <path refid="runtime.path"/>
                <pathelement location="${classes.dir}"/>
            </classpath>
        </java>
    </target>

    <!--
    =============
    Clean targets
    =============
    -->
    <target name="clean">
        <delete dir="${build.dir}"/>
    </target>

    <target name="clean-all" depends="clean">
        <ivy:cleancache/>
    </target>

</project>
4

1 に答える 1

0

はい、アイビーにはバグがあります..そして、これが原因で発生します。人々が与えたバグとその解決策を見てください。それは私のために働いた。解決策は、プロジェクトの保存時にコンパイル オプションを無効にする必要があることです。これが役立つかどうかを確認してください。

于 2013-08-27T07:18:51.270 に答える