由于Github禁用了下载,我们需要使用一个新的服务(如Bintray.com)来发布我们的二进制文件。对于我们的用例,我需要构建一个包(使用appassembler maven插件),然后压缩和tar.gz这个构建并将其部署到bintray。
如果travis将提供夜间构建,并使用mvn发布插件进行手动发布,那就太好了。
目前pom看起来是这样的:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>myproject</groupId>
<artifactId>myproject</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<scm>
<url>https://github.com/d0x/fromGithubToBintray</url>
<connection>scm:git:git://github.com/d0x/fromGithubToBintray.git</connection>
<developerConnection>scm:git:git@github.com:d0x/fromGithubToBintray.git</developerConnection>
</scm>
<developers>
<developer>
<name>Christian Schneider</name>
<url>https://github.com/d0x</url>
<id>d0x</id>
</developer>
</developers>
<!-- <distributionManagement> -->
<!-- <repository> -->
<!-- <id>bintray</id> -->
<!-- <url>https://api.bintray.com/maven/d0x/fromGithubToBintray/downloads</url> -->
<!-- </repository> -->
<!-- </distributionManagement> -->
<properties>
<mainClass>fromGithubToBintray.Main</mainClass>
<java-version>1.7</java-version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<!-- ... -->
</dependencies>
<build>
<plugins>
<!-- To build a clean binary pacakge to distribute -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.4</version>
<configuration>
<programs>
<program>
<mainClass>${mainClass}</mainClass>
<name>fromGithubToBintray</name>
</program>
</programs>
<extraJvmArguments>-Djava.awt.headless=true</extraJvmArguments>
</configuration>
</plugin>
<!-- To specify the Java Version -->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<useReleaseProfile>false</useReleaseProfile>
<releaseProfiles>release</releaseProfiles>
<autoVersionSubmodules>true</autoVersionSubmodules>
</configuration>
</plugin>
</plugins>
</build>
</project>
如何调整pom文件来做到这一点?
再现:
我把这个小例子上传到github:https://github.com/d0x/fromGithubToBintray
要执行它,请执行以下操作:
- git克隆https://github.com/d0x/fromGithubToBintray.git
- cd从Github到Bintray
- mvn干净包appassembly:汇编
- chmod+x target/appassemblyr/bin/fromGithubToBintray
- /target/appassemblyr/bin/fromGithubToBintray
这应该打印You did it!
。现在的目标是上传压缩并将这个appassembly文件夹上传到bintray。
已完成的研究:
- 本教程展示了如何使用Bintray.com发布到Maven存储库
- 我还看到Netty项目在bintray上托管下载。但在詹金斯的Poms,我看不到与垃圾箱相关的东西
问题是Bintray不支持SNAPSHOTs(Bintray仅适用于发行版)。你需要的是一个Artifactury+Bintray组合,它将快照部署到Artifactury,并偶尔(当你设计时)向Bintray发布一个"生产就绪"版本。
根据您项目的性质,您可能有资格在oss.jfrog.org上获得免费帐户。要求您的可交付成果是JCenter中包含的开源库/产品。
从Artifactory推送到Bintray是一个非常简单的过程,只需单击Artifactory UI中的按钮或执行REST调用即可执行。请记住,它必须是一个版本,而不是SNAPSHOT。
有很多方法可以将SNAPSHOT转换为发布,其中包括手动更改POM中的版本、Maven release Plugin等。当你使用oss.jfrog.org作为你的Artifactory服务器时,它包括一个特殊的插件,它可以一次性将SHAPSHOT转换为版本并部署到Bintray。
我认为有两种方法可以将zip/tar.gz文件部署到bintray.com.
1.通过CI上传
您可以使用curl将通用文件上传到bintrac.com。
curl -T <FILE.EXT> -u$USER:<API_KEY> https://api.bintray.com/content/$USER/generic/<UR_COOL_PACKAGE_NAME>/<VERSION_NAME>/<FILE_TARGET_PATH>
您可以使用CI/travis在maven上构建项目,并使用curl上传指定的文件。travis应该是可能的。参见此处
2.使用Maven部署
使用maven,您可以使用mvn-deploy:deploy文件部署指定的文件,如*.zip。也许这是你的解决方案?
回答后编辑
要创建*.zip档案,您可以使用maven汇编插件
1.将maven组装插件添加到pom
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptor>src/main/assembly/bin.xml</descriptor>
</configuration>
</plugin>
2.创建配置文件
我为你创建了一个小例子。它将压缩来自appassembly目标的bin文件夹。
<?xml version="1.0" encoding="UTF-8"?>
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>distribution</id>
<formats>
<format>zip</format>
</formats>
<fileSets>
<fileSet>
<directory>target/appassembler/bin</directory>
<outputDirectory></outputDirectory>
</fileSet>
</fileSets>
</assembly>
3.执行maven
命令:mvn clean appassembly:组装包
4.上传通用文件
使用maven上传您的通用文件。你应该看看exec-maven插件或者使用mvn-deploy:deploy-file插件。如果你想使用这个,它应该是这样的:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.6</version>
<goals>
<goal>deploy-file</goal>
</goals>
<configuration>
<repositoryId>release</repositoryId>
<packaging>zip</packaging>
<generatePom>false</generatePom>
<url>http://repository-url</url>
<artifactId>${project.artifactId}</artifactId>
<groupId>${project.groupId}</groupId>
<version>${project.version}</version>
<file>target/filename.zip</file>
</configuration>
</plugin>
...
<distributionManagement>
<repository>
<id>releases</id>
<name>My Artifactory-... server</name>
<url>http://url-to-repository</url>
</repository>
</distributionManagement>
在我的例子中,maven中的settings.xml如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<settings
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"
xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<servers>
<server>
<username>my-user</username>
<password>my-password</password>
<id>releases</id>
</server>
</servers>
<profiles>
<profile>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>releases</id>
<name>Name</name>
<url>http://serverurl</url>
</repository>
</repositories>
<id>artifactory</id>
</profile>
</profiles>
<activeProfiles>
<activeProfile>artifactory</activeProfile>
</activeProfiles>
</settings>
如果您现在执行mvn-clean-appassembly:assembly-package,然后执行mvn-deploy:deploy-file您将创建一个存档并将其上传到您的maven存储库。