java - 项目间依赖关系的方法

标签 java ant ivy

我有一个基于控制台的构建系统,该系统使用 AntIvy,并且希望避免使用 Maven。我使用 Ivy 获取项目的外部依赖项。我的问题是如何最好地处理我的内部项目依赖项。 IE。我构建了许多库文件(JAR),我的模块基于这些文件,并且不太可能在其他上下文中使用。因此,这些内部项目依赖项只是由build.xml文件捕获,通过相对路径直接标识所需 JAR 的位置(因为所有内容都位于存储库中的同一源代码树下) 。例如。我有像这样的Ant“代码”:

<path id = "compile.classpath">
  <fileset dir="${internal-project-dependency-a.dir}">
    <include name ="*.jar"/>
  </fileset>
  <fileset dir="${internal-project-dependency-b.dir}">
    <include name ="*.jar"/>
  </fileset>
  <fileset dir="${internal-project-dependency-c.dir}">
    <include name ="*.jar"/>
  </fileset>
</path>

我的问题是:上述方法是否可以接受(从最佳实践的角度来看),或者我应该将我的内部项目依赖项打包并发布到一些轻量级的“仅限本地”Ivy 存储库中(如果有这样的事情) )?我设置系统的方式是,任何使用 Ivy 和 Ant 的人都可以从 github check out 我的源代码,并从控制台构建所有内容,而无需配置任何其他类型的 Ivy 存储库信息,我想保留该属性。

最佳答案

Ivy 支持不同种类或存储库,如 documentation 中所述。 .

  • 本地
  • 已分享
  • 公开

如果没有自定义,它们位于您的“~/.ivy2”目录下。因此,我建议配置每个构建以发布到本地存储库,并像平常一样简单地引用依赖项。您需要做的就是确保在新机器上构建顺序正确,以便以正确的顺序填充本地存储库(请参阅 buildlist 任务)。

使用本地存储库与引用已知相对位置中的 jar 没有太大区别。它确实具有使每个项目彼此解耦的好处。

示例

├── build.xml
└── ivy.xml

项目将 3 个文件发布到本地存储库:

$ find ~/.ivy2/local -type f
/home/mark/.ivy2/local/myorg/hello/1.0/ivys/ivy.xml.sha1
/home/mark/.ivy2/local/myorg/hello/1.0/ivys/ivy.xml
/home/mark/.ivy2/local/myorg/hello/1.0/ivys/ivy.xml.md5
/home/mark/.ivy2/local/myorg/hello/1.0/docs/English.txt.md5
/home/mark/.ivy2/local/myorg/hello/1.0/docs/Spanish.txt.sha1
/home/mark/.ivy2/local/myorg/hello/1.0/docs/English.txt.sha1
/home/mark/.ivy2/local/myorg/hello/1.0/docs/Irish.txt.sha1
/home/mark/.ivy2/local/myorg/hello/1.0/docs/Spanish.txt.md5
/home/mark/.ivy2/local/myorg/hello/1.0/docs/English.txt
/home/mark/.ivy2/local/myorg/hello/1.0/docs/Spanish.txt
/home/mark/.ivy2/local/myorg/hello/1.0/docs/Irish.txt.md5
/home/mark/.ivy2/local/myorg/hello/1.0/docs/Irish.txt

build.xml

<project name="demo" default="publish" xmlns:ivy="antlib:org.apache.ivy.ant">

    <target name="init">
      <ivy:resolve/>
    </target>

    <target name="build" depends="init">
      <mkdir dir="build"/>
      <echo file="build/English.txt">Hello world</echo>
      <echo file="build/Irish.txt">Dia dhuit</echo>
      <echo file="build/Spanish.txt">Hola mundo</echo>
    </target>

   <target name="publish" depends="clean,build">
      <ivy:publish pubrevision="1.0" status="release" resolver="local" >
         <artifacts pattern="build/[artifact].[ext]"/>
      </ivy:publish>
   </target>

    <target name="clean" description="Cleanup build files">
        <delete dir="build"/>
    </target>

</project>

ivy.xml

<ivy-module version="2.0">
  <info organisation="myorg" module="hello"/>
  <publications>
    <artifact name="English" ext="txt" type="doc"/>
    <artifact name="Irish" ext="txt" type="doc"/>
    <artifact name="Spanish" ext="txt" type="doc"/>
  </publications>
</ivy-module>

关于java - 项目间依赖关系的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24204953/

相关文章:

java - proguard 作为 Ant 任务

java - Ant Sonar 将多个报告合并为一个

Ivy - 无法下载,因为 POM 文件和 JAR 文件名与模式不匹配

gradle - 使用 gradle publish 时,ivy module.xml 不包含所有工件

java - jar 配置及其内容

java - 第一个参数类型 Uri/FileProvider fragment 错误

java - 在jdb中调试时 "bci"是什么?

java - Java 中的 SSLServerSocket 和 SSLSocket 握手异常

java - 将对象缓存为不可变类

java - 如何通知其他团队成员重要的项目变更(使用 SVN 或 Ant)?