无法从 eclipse 项目构建路径中的 apache ivy 依赖项导入类
Posted
技术标签:
【中文标题】无法从 eclipse 项目构建路径中的 apache ivy 依赖项导入类【英文标题】:can not import class from apache ivy dependencies in eclipse project build path 【发布时间】:2014-12-27 09:18:52 【问题描述】:您好,我是 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>
这是一个用于摇摆应用程序的 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();
为什么不导入类。我做得对吗????
【问题讨论】:
与您的问题没有直接关系,但有一个更新版本的 JDatePicker 可用,其中包含许多错误修复:search.maven.org/#browse%7C-1191578160 【参考方案1】:我创建了与您相同的文件结构,ivy.xml 和 build.xml 中没有错误,并且 ant run 任务运行良好。 Ivy 按预期解析了 jar 文件,并且 ant 目标在类路径中包含正确的目录。我认为您只是忘记将类导入 HelloWorld.java
import net.sourceforge.jdatepicker.impl.UtilDateModel;
//TODO import more
为避免这些错误,您可以使用 IDE(Eclipse、Netbeans、Idea w/e),它们都支持 Ant 和 Ivy。
如果您没有忘记导入类。您需要更加具体并找到您的 ant 目标失败的阶段。
如果是compile
尝试回显classpath
并运行相同的蚂蚁
带有javac src/HelloWorld.java -cp ./lib/jdatepicker-1.3.2.jar
的命令和您的类路径。
如果是run
,用同样的方法试试java -jar ...
【讨论】:
因此您需要将 jdatepicker.jar 包含到 IDE 的项目设置库中 是的。像普通项目一样,当我们需要外部 jar 文件时,我们只需使用 eclispe 将其添加到类路径中。这正是我想要的。【参考方案2】:Ivy 是 ANTnot eclipse 的依赖管理。如果你想让 ivy 解析 Eclipse 类路径,你需要安装 ivy 插件(参见ivyDE)
你的例子也适用于我。正如@deathangel908 指出的那样,您需要正确设置包声明并从第 3 方 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();
【讨论】:
以上是关于无法从 eclipse 项目构建路径中的 apache ivy 依赖项导入类的主要内容,如果未能解决你的问题,请参考以下文章