Aru*_*gal 6 upload file artifact artifactory gradle
我有以下文件,我想作为9.8.0版本的工件上传到Artifactory.
注意:前两个文件没有扩展名(它们是可执行文件,即如果你打开它们/ cat,你会看到垃圾字符).
CVS中给定版本9.8.0的文件夹/文件如下:
com.company.project/gigaproject/v9.8.0/linux/gigainstall com.company.project/gigaproject/v9.8.0/solaris/gigainstall com.company.project/gigaproject/v9.8.0/win32/gigainstall.exe com.company.project/gigaproject/v9.8.0/gigafile.dtd com.company.project/gigaproject/v9.8.0/gigaanotherfile.dtd com.company.project/gigaproject/v9.8.0/giga.jar com.company.project/gigaproject/v9.8.0/giga.war
上传具有扩展名的上述文件非常简单...您可以作为管理员/用户登录Artifactory,有权访问部署工件,单击"部署"选项卡,浏览Artifactory文件,一旦选择文件,点击"上传"按钮.

接下来,您将看到一个屏幕(如上所示).你将在这个页面的字段中调整你想要的东西,一旦你点击"Deploy Artifact",你就完成了.您需要确保file.extension在上传时选择正确的文件,并确保文件扩展名正确显示在"目标路径"框中(使用版本-xxx等).
我的问题:
问题1:如何上传没有扩展名的工件?默认情况下,Artifactory似乎将工件作为.jar扩展名.如何上传Linux和Solaris上面的文件夹/文件结构中显示的"gigainstall"工件?我看到我可以将工件名称用作gigainstall-linux和gigainstall-solaris并区分它,但我不知道如何告诉Artifactory这个工件没有任何扩展名.
我认为开发团队不会开始使用适当的扩展来生成这个工件(因为这个工件可能在其他项目中的任何地方都被硬编码,他们当前从某个地方从CVS/SVN源控件获取它 - 这本身就是一个不好的做法.将工件存储在源控件版本工具中).

问题2:我如何告诉构建系统(例如,Gradle)在"编译"任务期间使用非扩展工件.在build.gradle下的section dependencies {..}下,我将添加如下所示的内容,但我不确定非扩展文件(我在上面提到的文件夹/文件结构中的前两个).
dependencies {
//compile 'com.company.project:gigainstall-linux:9.8.0@'
//compile 'com.company.project:gigainstall-linux:9.8.0@??????'
//compile 'com.company.project:gigainstall-linux:9.8.0@""'
//compile 'com.company.project:gigainstall-linux:9.8.0@"none"'
//compile 'com.company.project:gigainstall-linux:9.8.0@"NULL_or_something"'
// The following will easily get giga.jar version giga-9.8.0.jar from Artifactory repository
compile 'com.company.project:giga:9.8.0'
// The following will easily get giga.war
compile 'com.company.project:giga:9.8.0@war'
// Similarly, other extension based artifacts can be fetched from Artifactory
compile 'com.company.project:gigafile:9.8.0@dtd'
compile 'com.company.project:gigaanotherfile:9.8.0@dtd'
}
答案1(将以不同的意义覆盖2):使用"部署"选项卡下的Artifactory"Artifact Bundle"功能部分,可以通过首先创建zip文件,以我们想要的方式进行TRICK至少上传工件(包含其中的结构和工件) - 或者您可以使用/调用Artifactory REST API方式上传工件.
高层次的想法:
创建一个名为gigaproject.zip的zip文件或Artifactory可以读取的anyname.zip/.tar/compressed文件.在zip中,创建结构 - 如何将这些工件加载到Artifactory
即 gigaproject.zip将包含以下文件夹/结构/文件.
情况1:
com/company/project/gigaproject/9.8.0/linux/gigainstall com/company/project/gigaproject/9.8.0/solaris/gigainstall com/company/project/gigaproject/9.8.0/win32/gigainstall.exe com/company/project/gigaproject/9.8.0/gigafile.dtd com/company/project/gigaproject/9.8.0/gigaanotherfile.dtd com/company/project/gigaproject/9.8.0/giga.jar com/company/project/gigaproject/9.8.0/giga.war
注意:在第一种情况下,我没有在文件名中使用任何-xxx(即我使用普通和简单的giga.jar而不是giga-9.8.0.jar).

上面的Upload/Deploy将生成文件(如下面的快照所示):

所以,我们已经实现了我们想要的.实际上(明显地说是),但不是Artifactory通常存储这些工件的方式(因为它们应该-xxx版本嵌入文件名中,其中工件id应该与工件文件名匹配).现在,如果您想在Gradle构建文件中使用以下内容,则不能首先使用-xxx版本名称上传文件名,其次,我们的案例1树中的工件ID是"gigaproject"(在com/company/project文件夹之后),所以Gradle定义什么工件id和你想要的工件文件名的方法是行不通的.
compile 'com.company.project:gigaproject:CANNOTSAY_HOW_TO_GET_GIGA_JARorGIGAINSTALL_with_without_extension'
Run Code Online (Sandbox Code Playgroud)
结论:可以在任何结构中上传任何文件(在Artifactory中有/无扩展名),但这取决于您的构建系统将如何使用它或者能否使用它. - 我从Artifactory存储库中删除了我刚创建的带有案例1 .zip文件的结构,以尝试下一个案例#2并删除我创建的.zip文件.
案例2:
让我们为每个工件创建一个单独的版本化文件名,并以格式创建结构 - Artifactory如何实际存储它们(在树视图中的存储库中看到的工件)并创建包含该结构的.zip文件.让我们使用相同的"Artifact Bundle"功能上传这个.zip文件来上传Artifactory中我们需要的各个工件 - 其中artifact-id(我们在尝试使用它时提到的第二个值)将匹配Artifactory中的工件文件名.
.zip文件的文件夹/文件结构:
com/company/project/gigainstall/9.8.0/gigainstall-9.8.0.linux com/company/project/gigainstall/9.8.0/gigainstall-9.8.0.solaris com/company/project/gigainstall/9.8.0/gigainstall-9.8.0.exe com/company/project/gigafile/9.8.0/gigafile-9.8.0.dtd com/company/project/gigaanotherfile/9.8.0/gigaanotherfile-9.8.0.dtd com/company/project/giga/9.8.0/giga-9.8.0.jar com/company/project/giga/9.8.0/giga-9.8.0.war
注意:这次,我们将使用相同的"Artifact Bundle"功能和类似文件(在Linux/Solaris文件夹下都有gigainstall),我采用了创建gigainstall文件夹的方法(包含gigainstall-9.8.0.linux和gigainstall) -9.8.0.solaris文件名)即当我们在依赖{...}部分的Gradle中使用这些工件进行编译时,我们将使用xxx @ way从Artifactory中获取这些工件.

好的,一旦"Artifact Bundle"部署/上传成功完成,我收到以下消息.
Successfully deployed 7 artifacts from archive: gigaproject.zip (1 seconds).
现在,让我们看一下Artifactory在搜索Tree视图中的一个工件时的样子.你可以看到我们现在有了文件,使用filename-xxxextension方式,这样我就可以在Gradle中轻松使用它们.
在Gradle构建文件(build.gradle)中,我将提到:
dependencies {
compile "com.company.project:gigainstall:9.8.0@linux"
compile "com.company.project:gigainstall:9.8.0@solaris"
compile "com.company.project:gigainstall:9.8.0@linux"
compile "com.company.project:giga:9.8.0
compile "com.company.project:giga:9.8.0@war
compile "com.company.project:gigafile:9.8.0@dtd
compile "com.company.project:gigaanotherfile:9.8.0@dtd
}
OH OH !! - 这不起作用,请参阅下面的Gradle错误.为什么? - Artifactory Bundle上传/部署功能上传了.zip中的zip文件内容,但它不会为每个部署的工件创建.pom文件.因此,使Gradle构建失败.可能在Ant这可能会成功.每个.jar/.war/.dtd/etc文件都会发生这种情况.我只是展示了一个错误示例.
在做gradle清洁构建时
Could not resolve all dependencies for configuration ':compile'.
> Could not resolve com.company.project:gigafile:0.0.0.
Required by:
com.company.project:ABCProjectWhichConsumesGIGAProjectArtifacts:1.64.0
> Could not GET 'http://artifactoryserver:8081/artifactory/ext-snapshot-local/com/company/project/gigafile/0.0.0/gigafile-0.0.0.pom'. Received status code 409 from server: Conflict
Run Code Online (Sandbox Code Playgroud)
案例3:让我们采取一种简单的方法(解决方法,但会节省很多痛苦).使用以下结构创建gigaproject.zip文件,此方法采用 - 在文件夹/文件结构中的单个工件/文件名中嵌入无xxx版本值.我们将使用"单一工件"方法(它将在Artifactory提供的上传/部署过程中自动为gigaproject.zip文件创建.pom).您仍然可以使用此方法获取gigainstall文件,而无需对其名称进行任何扩展.在上传/部署步骤中,正如您已经看到的那样,您上传了gigaproject.zip,artifactory会将其作为"gigaproject- xxx .zip" 上传到给定的目标存储库,其中xxx是9.8.0(在我们的例子中).请参阅下面的图像快照.
gigaproject/linux/gigainstall gigaproject/solaris/gigainstall gigaproject/win32/gigainstall.exe gigaproject/gigafile.dtd gigaproject/gigaanotherfile.dtd gigaproject/gigaproject.zip gigaproject/giga.jar gigaproject/giga.war
现在,使用"单一工件"功能将其上传到Artifactory中.在调整GroupId,ArtifactId,Version等的值后,单击"Deploy Artifact".


一旦上传.你会在目标存储库中的zip工件中看到(我做了一个不好的例子,通常这将是libs-snapshot-local或libs-release-local而不是ext -...),你将能够消耗直接在Graddle中的ZIP工件:
dependencies {
// This is the only line we need now.
compile "com.company.project:gigaproject:9.8.0@zip"
}
Run Code Online (Sandbox Code Playgroud)
一旦.zip可用于Gradle构建系统,现在您可以告诉Gradle将这个.zip文件解压缩到构建/工作区中的某个位置,您可以在其中提供实际(解压缩)文件(gigainstall,.dtd,.jar,.war)等)到构建过程/步骤.
PS:案例#1和2对我来说可能适用于Ant.
答案2:
如果您以任何一种方式上传了未扩展的文件.确保你也手动创建/上传了它的POM文件(即如果我将gigainstall-9.8.0作为工件上传到com/company/project/gigainstall/9.8.0/gigainstall-9.8.0,那么在同一级别,我必须/应该创建它的POM文件(查看自定义jar工件的简单模板.pom文件,或者通过"单个工件"部署上传扩展文件时,您将看到POM编辑器窗口显示的内容)并上传两者所以Gradle不会错误地说没有POM冲突/错误.Ant可能不需要pom(我没有检查).
一旦它出现在Artifactory中,下面的行应该可行 - 或者如果你找到另一种方法请注释.
dependencies {
// See nothing mentioned after - x.x.x@
compile "com.company.package:gigainstall:9.8.0@"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26422 次 |
| 最近记录: |