Java 在build.xml中解析来自另一个项目的ivy依赖项

Java 在build.xml中解析来自另一个项目的ivy依赖项,java,ant,ivy,Java,Ant,Ivy,免责声明:我是使用Ant+Ivy的新手 我有以下eclipse配置: 项目A取决于项目B和项目C ProjectB取决于ProjectC 每个项目都有自己的ivy.xml文件 ProjectA有一个build.xml文件,如下所示: (...) <ivy:resolve file="../ProjectC/ivy.xml" /> <ivy:cachepath pathid="ivy.deps.default" conf="default" /> <ivy:cach

免责声明:我是使用Ant+Ivy的新手

我有以下eclipse配置:

项目A取决于项目B项目C

ProjectB取决于ProjectC

每个项目都有自己的ivy.xml文件

ProjectA有一个build.xml文件,如下所示:

(...)

<ivy:resolve file="../ProjectC/ivy.xml" />
<ivy:cachepath pathid="ivy.deps.default" conf="default" />
<ivy:cachefileset setid="ivy.deps.default.fileset" conf="default"/>


<ivy:resolve file="../ProjectB/ivy.xml" />
<ivy:cachepath pathid="ivy.deps.default" conf="default" />
<ivy:cachefileset setid="ivy.deps.default.fileset" conf="default"/>


<ivy:resolve file="ivy.xml" />
<ivy:cachepath pathid="ivy.deps.default" conf="default" />
<ivy:cachefileset setid="ivy.deps.default.fileset" conf="default"/>

<path id="classpath">
    <fileset dir="${webroot}/WEB-INF/lib" erroronmissingdir="no">
        <include name="*.jar"/>
    </fileset>
    <fileset dir="${libraries}" erroronmissingdir="no">
        <include name="*.jar"/>
    </fileset>
    <path refid="ivy.deps.default"/>
</path>

    (...)

<javac destdir="c:/abc" includeantruntime="yes" classpathref="ivy.deps.default">
                        <src path="../ProjectC/src"/>
                        <classpath refid="classpath"/>
                    </javac>

 (... Compile ProjectB ...)
 (... Compile ProjectA ...)
(…)
(...)
(…编译项目B…)
(…编译项目A…)
因此,运行这个build.xml会导致错误,即ProjectC无法编译,因为它缺少一个本应通过ivy:resolve命令解析的*.jar文件

我的问题是:

  • 如何生成一个build.xml来自动从子项目中检索依赖项并编译所有子项目

看起来每个项目都有一个常春藤文件,但没有每个项目的构建文件。正如Mark在上述评论中所说,每个项目都应该单独构建

例如:

  • 将ProjectB构建到驱动器上类似“SharedLibrary”的目录中。(漂亮的小JAR文件)
    • 注意ProjectB的常春藤文件。它设置组织、工件名称、版本等
  • 将“SharedLibrary”添加到您的ivy
    列表中,以便ivy在其中查找依赖项
  • 添加ProjectB作为ProjectA的依赖项(使用ProjectB常春藤中的注释信息)
这样你就可以去参加比赛了


Pro-Tip:代替“共享库”目录,考虑使用一些类似的方法来管理工件并从中拉出来。

我建议将每个项目与自己的常春藤文件分开。让每个项目都是独立的,并将其jar发布到共享存储库中,而不是试图解决另一个项目中的依赖关系。最后,对于多模块项目,您可以使用ivy buildlist任务,根据每个模块的ivy文件中记录的相互依赖关系,以正确的顺序构建每个模块。另请参见: