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

爪哇 - 阿帕奇常春藤没有正确解析依赖关系

东云
2023-03-14

我无法通过终端用Ant编译源代码,因为尽管我发出了“Ant resolve or Ant retrieve”,但依赖项似乎没有正确解析?

下面是我的build.xml和ivy.xml

编译文件

<!-- ANT HOME ENVIRONMENT VARIABLE -->
<property name="ant.home" value="${env.ANT_HOME}" />

<!-- IVY HOME DIRECTORY -->
<property name="ivy.home" value="${ant.home}" />

<!-- IVY2 JAR DIRECTORY (REPOSITORY) -->
<property name="ivy.default.ivy.user.dir" value="${user.home}/.ivy2"/>

<!-- DOWNLOAD IVY -->
<target name="setup" description="Install ivy">
    <mkdir dir="${user.home}/.ivy2" />
    <get dest="${ivy.home}/lib/ivy.jar" src="http://search.maven.org/remotecontent?filepath=org/apache/ivy/ivy/2.3.0/ivy-2.3.0.jar"/>
</target>

<!-- RESOLVE CLASSPATHS -->
<target name="resolve" description="Use ivy to resolve classpaths">
    <ivy:resolve file="ivy.xml" />
    <ivy:report todir='target/ivy-reports' graph='false' xml='false'/>
    <ivy:cachepath pathid="ivy.path" conf="compile" />
</target>

<!-- RETRIEVE DEPENDANCIES AFTER RESOLVING-->
<target name="retrieve" depends="resolve" description="Use ivy to retrieve dependencies">
    <ivy:retrieve sync="true" type="jar" />
</target>

<!-- COMPILE PROJECT -->
<target name="compile" depends="clean, retrieve">
    <!-- Create build directory -->
    <mkdir dir="target/${ant.project.name}" />

    <!-- Compile source code -->
    <javac includeantruntime="false" srcdir="src" debug="true" destdir="target/${ant.project.name}" >
        <classpath>
            <path refid="ivy.path" />
        </classpath>
    </javac>
</target>

<!-- CLEAN TARGET DIRECTORY -->
<target name="clean">
    <delete dir="target/orderlycalls" />
    <delete dir="target/classes" />
    <delete dir="target/ivy-reports" />     
</target>

<!-- CLEAN TARGET AND IVY CATCHE -->
<target name="clean-all" depends="clean" description="Additionally purge ivy cache">
    <ivy:cleancache/>
</target>

ivy.xml

<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">

    <configurations>
        <conf name="default" visibility="public" description="The single built artifact. Nothing else"/>
        <conf name="compile" visibility="public" description="The master module and transitive dependencies"/>
        <conf name="provided" visibility="public" description="Needed for compile. Will be provided outside or war"/>
        <conf name="runtime" visibility="public" description="Not required for compile, but for runtime" extends="compile"/>
        <conf name="default" visibility="public" description="The default configuration" extends="runtime"/>
        <conf name="test" visibility="private" description="Required for testing" extends="runtime"/>
    </configurations>

    <dependencies>
        <dependency org="net.sf.trove4j" name="trove4j" rev="3.0.3" conf="provided"/>
        <dependency org="org.apache.tomcat.embed" name="tomcat-embed-core" rev="7.0.53" conf="provided"/>
    </dependencies>

</ivy-module>

当我运行“ant-compile”时,on-compiling ant抱怨它找不到作为tomcat一部分的“Servlet Context”。jar或“TObject”、“THashMap”是trove的一部分。jar和更多,尽管我正在build.xml中检索/解析jar。

我注意到的另一件事是,在我的.ivy2 /缓存//中,没有实际的jar文件。仅 xml 文件

你知道我做错了什么或根本没有做什么吗?

谢啦

共有1个答案

朱海超
2023-03-14

您已经使用cachepath任务创建了一个Ant路径,使用了与“编译”配置相关联的依赖项。

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

您的问题在于您的ivy文件,您没有在其中指定任何带有映射到“编译”配置的依赖项。这将解释为什么您的javac任务看不到任何jar。

   <configurations>
        ...
        <conf name="compile" .../>
        <conf name="provided" .../>
        ...
    </configurations>

    <dependencies>
        <dependency ... conf="provided"/>
        <dependency ... conf="provided"/>
    </dependencies>

我建议为您的每个配置创建一个显式映射,例如:

<!-- Compile dependencies --> 
<dependency org="net.sf.trove4j" name="trove4j" rev="3.0.3" conf="compile->default"/>

<!-- provided dependencies -->
<dependency org="org.apache.tomcat.embed" name="tomcat-embed-core" rev="7.0.53" conf="provided->master"/>

您唯一需要的映射是以下远程配置:

  • 默认远程 jar 及其可传递依赖项
  • 仅主远程罐

有关ivy如何解释远程maven模块的更多信息,请阅读以下内容:

  • 如何通过常春藤将 maven 作用域映射到常春藤配置
 类似资料:
  • 我无法使用Apache Ivy解决我的vaadin 7项目。每当我尝试时,它都会显示一个错误框,其中显示 “常春藤解决”遇到了一个问题。某些项目无法解决。 在单击错误框上的“详细信息”按钮时,我得到了以下附加信息 某些项目无法解决无法解决com.example#v7proj;的依赖项;working@User无法解析的依赖项:com.vaadin#vaadin客户端已编译;7.6.2:未找到未解析

  • 我作为一个Maven新手,我正在玩我自己的本地Sonartype Nexus。我已经将我的maven安装配置为使用它作为代理,并且在解决我的< code>pom.xml中的以下依赖关系时,它对于一个简单的测试项目工作得很好 接下来,我尝试了一个类似的项目 在.常春藤使用与代理相同的Nexus服务器(在中配置.xml) 但是,在运行ant时,它无法解析 我已经尝试在Nexus安装中添加更多的远程存储

  • 问题内容: 我在ivaven.xml中添加了一个依赖项(让我们将其命名为A),它在maven Central中具有一个pom文件。Ivy使用ibiblio解决了Maven依赖关系。添加到ivy.xml的依赖项(A)具有传递的依赖项(B)。到目前为止,到目前为止很好。常春藤无法解决传递性依赖项(B)的依赖项(C)。 我在ivy.xml中定义了A,如下所示: 在B的pom文件中,在编译和测试范围中都定

  • 在excel表格中如何在java中使用Apache POI获取准确的字体颜色值?我试图通过使用 org . Apache . poi . ss . user model . font f = book . getfont at(style . getfont index());short clr idx = f . getcolor(); 但它没有给出确切的颜色索引。获得此颜色值后,我必须在PDF

  • 使用日食(赫利俄斯)的常春藤2.2和常春藤DE 2.2。... 想从http://maven . spring framework . org/milestone/org/spring framework/data/spring-data-neo4j/2 . 1 . 0 . m1获取spring-data-neo4j及其默认依赖项 在我的常春藤文件中使用以下内容: 以及我的设置文件中的这些解析器:

  • 在尝试将apache log4j2与ivy build management工具结合使用时,我在尝试解析依赖项时遇到以下错误: 这是用常春藤做的。xml格式: 没有特殊的IVY设置。xml在起作用,只是从公共回购中收集的默认值。依赖关系解析是通过ant完成的,只是使用了一个非常标准的方法。Java运行时是版本8(JDK也是)。