使用IVY无法拉入源代码和javadoc在项目中包含来自文件系统的项目JAR

使用IVY无法拉入源代码和javadoc在项目中包含来自文件系统的项目JAR,java,jar,ivy,Java,Jar,Ivy,所以我已经尝试了一天的大部分时间,我已经很接近了。我有两个项目,我想将其中一个作为JAR发布到一个共享文件位置,然后将其拉入另一个项目,包括我正在生成的源文件和javadoc.JAR文件。实际的ivy:publish成功,文件在远程文件系统中正确创建 然而,当我试图在第二个项目中包含JAR时,我只能拉入基本JAR,而不能拉入包含源代码和javadoc的JAR 我的文件命名如下:[projectname]-[version]([classifier])因此在远程位置我得到foo-1.0.0.jar

所以我已经尝试了一天的大部分时间,我已经很接近了。我有两个项目,我想将其中一个作为JAR发布到一个共享文件位置,然后将其拉入另一个项目,包括我正在生成的源文件和javadoc.JAR文件。实际的
ivy:publish
成功,文件在远程文件系统中正确创建

然而,当我试图在第二个项目中包含JAR时,我只能拉入基本JAR,而不能拉入包含源代码和javadoc的JAR

我的文件命名如下:
[projectname]-[version]([classifier])
因此在远程位置我得到
foo-1.0.0.jar
foo-1.0.0-sources.jar
foo-1.0.0-javadoc.jar
&
ivy-1.0.0.xml
以及每个jar的
.sha
.md5
文件,但是我的常春藤只是把
foo-1.0.0.jar

我想强调的是,我已经成功地从mavenrepo远程存储库中自动引入了源代码和Javadoc,而且效果非常好。我只是不明白为什么它在找到类JAR并将其从文件系统中很好地拉下来时拒绝将源代码javadoc JAR拉到IVY缓存中

这是我用来从远程文件系统中提取文件的解析器模式:

/path/to/remote/location/[organization]/[module]/[revision]/[module]-[revision]([classifier])。[ext]

我用来将文件推送到共享位置的模式是:

/path/to/remote/location/[organization]/[module]/[revision]/[artifact]-[revision]([classifier])[ext]

我一直在搜寻人们拥有的文档和示例,但是文档也可能是用克林贡语编写的,不管它有什么意义,这些示例要么来自2010年,要么不从文件系统获取源代码

想法:

  • 这不是权限问题(如果是的话,IVY将无法删除任何内容)
  • 这不是一个连接问题(见上文)
  • 我如何发布我的项目可能会有问题(如果你认为是这样,我可以根据要求提供更多详细信息)
  • 我怀疑IVY根本没有读取远程文件系统上的IVY-1.0.0.xml文件。毕竟,这就是我声明源代码和javadoc JAR存在的地方
  • 不仅仅是这个项目,我还尝试对第三个项目执行相同的过程,只是让IVY只从远程文件系统获取class.jar文件
  • 我不能以IVY期望的方式创建/命名文件。我查看了mavencentral中使用的文件结构,并试图复制他们命名和布局文件的方式,但不起作用
我所尝试的:

  • 几乎所有我能想到的常春藤模式的组合
  • 重复删除缓存的文件,以查看IVY是否正确解析了远程文件系统中的所有文件(否则,它只会重新标记类JAR并在缓存目录中生成一个IVY-1.0.0.xml文件)
很高兴发布配置,并明确我正在做什么,如果你想让我等等,只需发表评论并询问你想要什么

第二个项目中的常春藤配置:


两个常春藤文件(两个项目之间)的唯一区别是这一行,这是推送到远程服务器的模式:


以及将解析器中的标记更改为
共享repo

远程位置中的常春藤文件:


在缓存中生成的常春藤文件:


远程服务器上的目录结构:

Org
|--模块
|--版本
|--ivy-1.0.0.xml
|--常春藤-1.0.0.md5
|--常春藤-1.0.0.sha
|--simple-email-1.0.0-javadoc.jar
|--simple-email-1.0.0-javadoc.jar.md5
|--simple-email-1.0.0-javadoc.jar.sha
|--simple-email-1.0.0-sources.jar
|--simple-email-1.0.0-sources.jar.md5
|--simple-email-1.0.0-sources.jar.sha
|--simple-email-1.0.0.jar
|--simple-email-1.0.0.jar.md5
|--simple-email-1.0.0.jar.sha
常春藤缓存目录结构:

Org
|--模块
|--ivy-1.0.0.xml
|--ivydata-1.0.0.0属性
|--罐子
|--simple-email-1.0.0.jar
在ANT脚本上发布任务:


说明 理论 首先,这个设置有点复杂,但也很熟悉,因为这是常春藤如何将Maven模块转换成常春藤模块的。问题在于理解Maven的“范围”如何转化为常春藤的“配置”

您的远程模块 针对你的具体问题,我认为问题在于你是如何下载文物的。远程模块声明以下文件:

   <publications>
        <artifact name="simple-email" type="jar" ext="jar" conf="master"/>
        <artifact name="simple-email" type="source" ext="jar" conf="sources" m:classifier="sources"/>
        <artifact name="simple-email" type="javadoc" ext="jar" conf="javadoc" m:classifier="javadoc"/>
    </publications>
编译文件

注:

  • ivy下载的文件分为“配置”。每个检索任务都有不同的“conf”属性
  • 配置在ivy文件中声明,映射在每个依赖项上定义
ivy.xml

注:

  • Ivy文件创建2个配置
  • 神奇之处在于depend的“conf”属性
    <configurations defaultconfmapping="default">
        ..
        ..
        <conf name="master"/> 
        <conf name="runtime"/> 
        <conf name="default" extends="master,runtime"/>
        ..
        ..
    </configurations> 
    
    <dependency org="company" name="simple-email" rev="1.0.0" conf="default"/>
    
    <local "default" configuration> -> <remote "default" configuration>
    
    <configurations>
        <conf name="compile" description="Required to compile application"/>
        <conf name="sources" description="Source code"/>
    </configurations>
    
    <dependency org="company" name="simple-email" rev="1.0.0" conf="compile->default;sources"/>
    
    <local "compile" configuration> -> <remote "default" configuration>
    <local "sources" configuration> -> <remote "sources" configuration>
    
    <ivy:cachepath pathid="compile.path" conf="compile"/>
    
    <ivy:retrieve pattern="build/src/[artifact]-[revision](-[classifier]).[ext]" conf="sources"/>
    
    ├── build
    │   └── src
    │       └── log4j-1.2.17-sources.jar
    ├── build.xml
    ├── ivy.xml
    └── lib
        └── log4j-1.2.17.jar
    
    <project name="demo" default="retrieve" xmlns:ivy="antlib:org.apache.ivy.ant">
    
        <target name="retrieve">
            <ivy:retrieve pattern="lib/[artifact]-[revision](-[classifier]).[ext]" conf="compile"/>
            <ivy:retrieve pattern="build/src/[artifact]-[revision](-[classifier]).[ext]" conf="sources"/>
        </target>
    
    </project>
    
    <ivy-module version="2.0">
        <info organisation="com.myspotontheweb" module="demo"/>
    
        <configurations>
            <conf name="compile" description="Required to compile application"/>
            <conf name="sources" description="Source code"/>
        </configurations>
    
        <dependencies>
            <dependency org="log4j" name="log4j" rev="1.2.17" conf="compile->default;sources" />
        </dependencies>
    
    </ivy-module>