当前位置: 首页 > 知识库问答 >
问题:

无法从日食项目构建路径中的常春藤依赖项导入类

沈鸿光
2023-03-14

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

<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文件夹。

我的身材。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();

    }

}

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

共有2个答案

胥玮
2023-03-14

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

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

├── build.xml
├── ivy.xml
└── src
    └── com
        └── mlen
            └── testApp
                └── 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();

    }

}
杨昊
2023-03-14

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

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

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

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

  • 如果是compile,尝试回显classpath并使用javac src/HelloWorld.java-cp./lib/jdatepicker-1.3.2.jar和您的类路径运行相同的ant命令。
  • 如果是run尝试使用java-jar…
 类似资料:
  • 通过右键单击项目并选择“配置”,我将一个动态web项目转换为一个maven项目- 然后,右键点击项目- 现在所有的JAR和类都可以在Maven依赖项部分中找到。下面是我的项目结构截图。 项目结构 下面是maven dependency部分的屏幕截图。 Maven依赖项部分 但是,我无法导入任何包或类形式的依赖jars到我的任何Java类(例如:HttpServices.java)在src文件夹中。

  • 我有一个项目,我正在覆盖到gradle。该项目有一些依赖项,如junit等。依赖项的Jars被下载,但这些Jars的依赖项没有下载。build.gradle文件如下 为什么测试:项目:17.20.快照不需要下载罐子?这个东西适用于蚂蚁常春藤项目 更新 1 我加了常春藤。测试项目的xml文件

  • 由于butterknife依赖的错误,我无法构建android项目。 错误 任务': app: javaPreCompileDebug'执行失败。 无法解析配置的所有文件: app: dedegAnnotationProcessorClasspath。转换butterknife-compiler-8.6.0.jar失败(com.jakewharton:巴特切夫-编译器: 8.6.0)以匹配属性{a

  • 我的gradle项目(“osgiapp”)依赖于一个OSGI项目(“osgidep”),该项目具有以下MANIFEST.MF条目: 这里导出了两个包: test.lib包由osgidep.jar中包含的lib/lib.jar提供 test.osgidep包由osgidep.jar本身提供 现在,我的建筑。Gradle看起来是这样的: 当我试图构建使用两个导出包的代码时:

  • 问题内容: ( - >)中的“ 自动构建” 选项的目的是什么?我的将始终被检查。但是,每当我进行一些Java代码更改时,我仍然必须进行完整构建。有人告诉我应该经常检查它。我认为这样做没有任何好处。请有人解释。 __ 问题答案: 是的,您仍然必须进行构建- 但是在保存时它会自动完成(不是像Ant外部构建那样的外部构建,而是“内部”构建)。如果您不想在保存时进行构建,则可以取消选中该框。我相信,自动生

  • 我有一个多项目的构建设置与gradle将包含多个android应用程序和库。 我想应用某些分级插件只对一些子项目。(比如android gradle插件只到android子项目)因此我在和插件声明中添加了类路径依赖项到两个android子项目: 和 。问题是gradle找不到android gradle插件: 错误:(%1,%1)评估项目“:ShopPr:Presentation”时出现问题。找不