无法从eclipse项目构建路径中的apacheivy依赖项导入类



嗨,我是apache ant和ivy的新手。我最近知道ant不支持依赖管理。所以我听说了ivy,一个ant的依赖管理器。现在的问题是,我已经将ivy依赖项添加到ivy.xml文件中

<ivy-module version="2.0">
    <info organisation="com.mlen" module="testApp"/>
    <dependencies>    
    <dependency org="net.sourceforge.jdatepicker" name="jdatepicker" rev="1.3.2"/>
    </dependencies>
</ivy-module>

它是swing应用程序的jdatepicker。现在的问题是,当我尝试访问依赖类时,它不会导入类。ivy将依赖项下载到项目目录下的lib文件夹。

我的build.xml文件

<project name="HelloWorld" 
      basedir="." 
      default="run">
<!--      xmlns:ivy="antlib:org.apache.ivy.ant">-->
    <property name="src.dir"     value="src"/>
    <property name="lib.dir"     value="lib"/>
    <property name="build.dir"   value="build"/>
    <property name="classes.dir" value="${build.dir}/classes"/>
    <property name="jar.dir"     value="${build.dir}/jar"/>
    <property name="main-class"  value="com.mlen.testApp.HelloWorld"/>
    <path id="classpath">
        <fileset dir="${lib.dir}" includes="**/*.jar"/>
    </path>
    <target name="clean">
        <delete dir="${build.dir}"/>
    </target>
    <target name="resolve" xmlns:ivy="antlib:org.apache.ivy.ant">
        <ivy:retrieve/>
    </target>
    <target name="compile" depends="resolve">
        <mkdir dir="${classes.dir}"/>
        <javac includeantruntime="false" srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath"/>
        <copy todir="${classes.dir}">
            <fileset dir="${src.dir}" excludes="**/*.java"/>
        </copy>
    </target>
    <target name="jar" depends="compile">
        <mkdir dir="${jar.dir}"/>
        <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
            <manifest>
                <attribute name="Main-Class" value="${main-class}"/>
                <!--how can i get ivy to note what the class path should be?-->
                <attribute name="Class-Path" value="log4j-1.2.17.jar"/>
            </manifest>
        </jar>
    </target>
    <target name="run" depends="jar">
        <java fork="true" classname="${main-class}">
              <classpath>
                <path refid="classpath"/>
                <path location="${jar.dir}/${ant.project.name}.jar"/>
            </classpath>
        </java> 
    </target>
    <target name="clean-build" depends="clean,jar"/>
    <target name="main" depends="clean,run"/>
</project>

最后是我的主课。

public class HelloWorld extends JFrame {
    public HelloWorld(){
        UtilDateModel model = new UtilDateModel();
        JDatePanelImpl datePanel = new JDatePanelImpl(model);
        JDatePickerImpl datePicker = new JDatePickerImpl(datePanel);
        add(datePicker);
        setSize(300, 200);
        setVisible(true);
    }


    public static void main(String[] args) {
     new HelloWorld();
    }
}

为什么不导入到类。我做得对吗????

我创建了与您相同的文件结构,ivy.xml和build.xml中没有错误,ant运行任务运行良好。Ivy按照预期的方式解析了jar文件,ant目标在类路径中包含了正确的目录。我想你只是忘记了将类导入HelloWorld.java

import net.sourceforge.jdatepicker.impl.UtilDateModel;
//TODO import more

为了避免这些错误,您可以使用IDE(Eclipse、Netbeans、Idea w/e),所有这些都支持Ant和Ivy。

如果你没有忘记导入类。你需要更加具体,找到你的蚂蚁目标失败的阶段。

  • 如果是compile,请尝试回显classpath并运行同一蚂蚁使用javac src/HelloWorld.java -cp ./lib/jdatepicker-1.3.2.jar命令和类路径
  • 如果是run,请尝试与java -jar ...相同的方法

Ivy是ANT而非eclipse的依赖项管理。如果你想让ivy解析Eclipse类路径,你需要安装ivy插件(见ivyDE)

你的例子也适用于我。正如@deathangel908所指出的,您需要正确设置包声明,并从第三方jar导入类。

├── build.xml
├── ivy.xml
└── src
    └── com
        └── mlen
            └── testApp
                └── HelloWorld.java

HelloWorld.java

package com.mlen.testApp;
import javax.swing.*;
import net.sourceforge.jdatepicker.impl.*;
public class HelloWorld extends JFrame {
    public HelloWorld(){
        UtilDateModel model = new UtilDateModel();
        JDatePanelImpl datePanel = new JDatePanelImpl(model);
        JDatePickerImpl datePicker = new JDatePickerImpl(datePanel);
        add(datePicker);
        setSize(300, 200);
        setVisible(true);
    }

    public static void main(String[] args) {
     new HelloWorld();
    }
}

相关内容

  • 没有找到相关文章

最新更新