使用IVY无法拉入源代码和javadoc在项目中包含来自文件系统的项目JAR
所以我已经尝试了一天的大部分时间,我已经很接近了。我有两个项目,我想将其中一个作为JAR发布到一个共享文件位置,然后将其拉入另一个项目,包括我正在生成的源文件和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
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文件创建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>