{"id":303319,"date":"2020-05-10T15:00:25","date_gmt":"2020-05-10T15:00:25","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=303319"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=303319","title":{"rendered":"\u0421\u0442\u0440\u043e\u0438\u043c pipeline \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 Graal Native Image \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/501306\/\">\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0447\u0443 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043e\u043f\u044b\u0442 \u043f\u043e \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0435 Graal Native Image \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c Mac OS \u0438 Linux \u0432 \u043e\u0434\u043d\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Travis CI.<\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439, \u044f \u043e\u0449\u0443\u0442\u0438\u043b \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043e\u043f\u044b\u0442 \u0437\u0434\u0435\u0441\u044c.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0436\u0430\u043b\u0443\u0439 \u043d\u0430\u0447\u043d\u0435\u043c.<\/p>\n<p>  <\/p>\n<p>\u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c:<\/p>\n<p>  <\/p>\n<ul>\n<li>Java \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043c\u0438 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 native image.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u0445\u043e\u0447\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0421\u043e\u0431\u0440\u0430\u0442\u044c native image \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Travis<\/li>\n<li>\u0421\u043e\u0431\u0440\u0430\u0442\u044c rpm \u0438 deb \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0430\u0440\u0445\u0438\u0432 \u0434\u043b\u044f mac \u0432\u0435\u0440\u0441\u0438\u0438<\/li>\n<li>\u0417\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u043d\u0430 Bintray<\/li>\n<li>\u0414\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u043a\u0435\u0442\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440<\/li>\n<li>\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441.<\/li>\n<\/ul>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<h2 id=\"poehali\">\u041f\u043e\u0435\u0445\u0430\u043b\u0438<\/h2>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 Hello world.<\/p>\n<p>  <\/p>\n<pre><code class=\"java\">package release.test;  public class Application {      public static void main(String[] args) {         System.out.println(&quot;Hello world&quot;);     } } <\/code><\/pre>\n<p>  <\/p>\n<p>\u0410 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0432 pom.xml.<\/p>\n<p>  <\/p>\n<pre><code class=\"xml\"> &lt;build&gt;         &lt;plugins&gt;             &lt;plugin&gt;                 &lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;                 &lt;artifactId&gt;maven-compiler-plugin&lt;\/artifactId&gt;                 &lt;version&gt;3.8.0&lt;\/version&gt;             &lt;\/plugin&gt;             &lt;plugin&gt;                 &lt;!-- Build an executable JAR --&gt;                 &lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;                 &lt;artifactId&gt;maven-jar-plugin&lt;\/artifactId&gt;                 &lt;version&gt;3.1.0&lt;\/version&gt;                 &lt;configuration&gt;                     &lt;archive&gt;                         &lt;manifest&gt;                             &lt;addClasspath&gt;true&lt;\/addClasspath&gt;                             &lt;classpathPrefix&gt;lib\/&lt;\/classpathPrefix&gt;                             &lt;mainClass&gt;release.test.Application&lt;\/mainClass&gt;                         &lt;\/manifest&gt;                     &lt;\/archive&gt;                 &lt;\/configuration&gt;             &lt;\/plugin&gt;             &lt;plugin&gt;                 &lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;                 &lt;artifactId&gt;maven-release-plugin&lt;\/artifactId&gt;                 &lt;version&gt;2.5.3&lt;\/version&gt;                 &lt;configuration&gt;                     &lt;tagNameFormat&gt;${project.version}&lt;\/tagNameFormat&gt;                 &lt;\/configuration&gt;             &lt;\/plugin&gt;         &lt;\/plugins&gt;     &lt;\/build&gt; <\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u044f \u0441\u043e\u0437\u0434\u0430\u043c \u0434\u0432\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 mac \u0438 linux \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u0411\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>maven-assembly-plugin<\/code>. \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0437\u0430\u0441\u043e\u0440\u044f\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0442\u043e\u043d\u043d\u0430\u043c\u0438 xml, \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u044f \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u044e <a href=\"https:\/\/github.com\/aarrsseni\/release-test\">\u0441\u0441\u044b\u043b\u043a\u0443<\/a> \u0441 \u043f\u043e\u043b\u043d\u044b\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c.<\/p>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a Travis CI. \u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043c \u044f \u0445\u043e\u0447\u0443 \u0441\u043e\u0431\u0440\u0430\u0442\u044c native image, \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043d\u0443\u0436\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0438 \u0437\u0430\u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c.<\/p>\n<p>  <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b <code>.travis.yml<\/code> \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0434\u0435\u043f\u043b\u043e\u0439 \u043f\u043b\u0430\u043d\u0430 \u0438 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0435\u0433\u043e \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c.<br \/>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">os:  - linux  - osx  language: java install: true  script:  - if [ $TRAVIS_OS_NAME == &quot;osx&quot; ]; then     chmod +x .\/prepare-mac.sh;     .\/prepare-mac.sh;    fi  - if [ $TRAVIS_OS_NAME == &quot;linux&quot; ]; then     chmod +x .\/prepare-linux.sh;     .\/prepare-linux.sh;    fi<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0432\u044b\u0448\u0435, \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0443 \u0434\u043b\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0432\u0441\u0435\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f Mac OS \u0441\u043a\u0440\u0438\u043f\u0442 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">#!\/usr\/bin\/env bash curl -OL https:\/\/github.com\/oracle\/graal\/releases\/download\/vm-19.1.1\/graalvm-ce-darwin-amd64-19.1.1.tar.gz tar zxf graalvm-ce-darwin-amd64-19.1.1.tar.gz sudo mv graalvm-ce-19.1.1 \/Library\/Java\/JavaVirtualMachines export PATH=\/Library\/Java\/JavaVirtualMachines\/graalvm-ce-19.1.1\/Contents\/Home\/bin:$PATH \/Library\/Java\/JavaVirtualMachines\/graalvm-ce-19.1.1\/Contents\/Home\/bin\/gu install native-image mvn clean package -P mac NAME=$(basename $(find . -type f -name 'release-test-*.jar')) native-image -jar target\/${NAME} -H:Name=release-test mvn package -P assembly<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0439\u0434\u0435\u043c\u0441\u044f \u043f\u043e \u0448\u0430\u0433\u0430\u043c. \u0413\u0440\u0443\u0437\u0438\u043c, \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c <code>GraalVM<\/code>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0433\u0440\u0443\u0436\u0430\u0435\u043c <code>native-image<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0442 \u0432 \u0441\u0431\u043e\u0440\u043a\u0435 Graal \u0434\u043b\u044f Mac. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c jar, \u0430 \u0434\u0430\u043b\u0435\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c native-image \u0438 \u0441\u043d\u043e\u0432\u0430 \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u0432 \u0430\u0440\u0445\u0438\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0443\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u043d\u0430\u0448 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f Linux \u0441\u043a\u0440\u0438\u043f\u0442 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0430\u0447\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043d\u0435\u043c \u043c\u044b \u0441\u0440\u0430\u0437\u0443 \u0441\u043e\u0431\u0435\u0440\u0435\u043c rpm \u0438 deb \u043f\u0430\u043a\u0435\u0442\u044b:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">#!\/usr\/bin\/env bash curl -OL https:\/\/github.com\/oracle\/graal\/releases\/download\/vm-19.1.1\/graalvm-ce-linux-amd64-19.1.1.tar.gz tar zxf graalvm-ce-linux-amd64-19.1.1.tar.gz sudo mv graalvm-ce-19.1.1 \/usr\/lib\/jvm\/ export JAVA_HOME=\/usr\/lib\/jvm\/graalvm-ce-19.1.1 export PATH=$PATH:${JAVA_HOME}\/bin  mvn clean install ${JAVA_HOME}\/bin\/gu install native-image NAME=$(basename $(find . -type f -name 'release-test-*.jar'))  mkdir release-deb cd release-deb native-image -jar ..\/target\/${NAME} -H:Name=release-test PACK_NAME=$(ls) chmod +x ${PACK_NAME} mkdir packageroot mkdir packageroot\/DEBIAN touch packageroot\/DEBIAN\/control VERSION=$(echo &quot;${NAME%.*}&quot; | cut -d'-' -f 3) echo &quot;Package: $PACK_NAME Version: $VERSION Architecture: amd64 Maintainer: John Doe &lt;john@doe.com&gt; Description: test &quot; &gt; packageroot\/DEBIAN\/control cat packageroot\/DEBIAN\/control mkdir -p packageroot\/usr\/bin cp ${PACK_NAME} packageroot\/usr\/bin\/ dpkg-deb -b packageroot ${PACK_NAME}-${VERSION}.deb  sudo dpkg -i .\/${PACK_NAME}-${VERSION}.deb sudo apt-get install -f  DEB_PACK=$(find . -type f -name 'release-test-*.deb') echo ${DEB_PACK} cp ${DEB_PACK} ..\/target\/  cd ..\/target  # convert to rpm sudo apt-get update sudo apt-get install rpm sudo apt-get install ruby ruby-dev rubygems build-essential gem install --no-ri --no-rdoc fpm  fpm -t rpm -s deb ${PACK_NAME}-${VERSION}.deb<\/code><\/pre>\n<p>  <\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u0442\u0430\u043a\u0436\u0435 \u0433\u0440\u0443\u0437\u0438\u043c GraalVM \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c native-image. \u0414\u0430\u043b\u0435\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043a\u043e\u0434\u0430, \u044f \u0434\u0443\u043c\u0430\u044e, \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>  <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c debian \u043f\u0430\u043a\u0435\u0442. \u0412 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u0435\u0441\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u043a\u0435\u0442\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">mkdir release-deb cd release-deb native-image -jar ..\/target\/${NAME} -H:Name=release-test PACK_NAME=$(ls) chmod +x ${PACK_NAME} mkdir packageroot mkdir packageroot\/DEBIAN touch packageroot\/DEBIAN\/control VERSION=$(echo &quot;${NAME%.*}&quot; | cut -d'-' -f 3) echo &quot;Package: $PACK_NAME Version: $VERSION Architecture: amd64 Maintainer: John Doe &lt;john@doe.com&gt; Description: test &quot; &gt; packageroot\/DEBIAN\/control cat packageroot\/DEBIAN\/control mkdir -p packageroot\/usr\/bin cp ${PACK_NAME} packageroot\/usr\/bin\/ dpkg-deb -b packageroot ${PACK_NAME}-${VERSION}.deb  sudo dpkg -i .\/${PACK_NAME}-${VERSION}.deb sudo apt-get install -f  DEB_PACK=$(find . -type f -name 'release-test-*.deb') echo ${DEB_PACK} cp ${DEB_PACK} ..\/target\/<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u044f \u0445\u043e\u0447\u0443 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c debian \u043f\u0430\u043a\u0435\u0442 \u0432 rpm. \u041c\u043d\u0435 \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0442\u044c \u0432\u0441\u0435 \u0442\u0435 \u0436\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0435\u0449\u0435 \u0440\u0430\u0437, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/github.com\/jordansissel\/fpm\">fpm<\/a>. \u0414\u0430\u043d\u043d\u0430\u044f \u0442\u0443\u043b\u0437\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432 \u043e\u0434\u043d\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0441\u043e\u0437\u0434\u0430\u0442\u044c rpm \u043f\u0430\u043a\u0435\u0442 \u0438\u0437 debian.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\"># convert to rpm sudo apt-get update sudo apt-get install rpm sudo apt-get install ruby ruby-dev rubygems build-essential gem install --no-ri --no-rdoc fpm  fpm -t rpm -s deb ${PACK_NAME}-${VERSION}.deb<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 <code>before_deploy<\/code> \u0431\u043b\u043e\u043a \u0432 <code>.travis.yml<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">before_deploy:   - if [ $TRAVIS_OS_NAME == &quot;linux&quot; ]; then     chmod +x .\/update-version.sh;     .\/update-version.sh;     fi<\/code><\/pre>\n<p>  <\/p>\n<p>update-version.sh<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">#!\/usr\/bin\/env bash  cd target  NAME=$(basename $(find . -type f -name 'release-test-*.jar')) VERSION=$(echo &quot;${NAME%.*}&quot; | cut -d'-' -f 3)  cd ..\/  sed -i &quot;s\/template_version\/$VERSION\/g&quot; deploy-deb.json sed -i &quot;s\/template_tag\/$VERSION\/g&quot; deploy-deb.json  sed -i &quot;s\/template_version\/$VERSION\/g&quot; deploy-rpm.json sed -i &quot;s\/template_tag\/$VERSION\/g&quot; deploy-rpm.json<\/code><\/pre>\n<p>  <\/p>\n<p>\u0424\u0430\u0439\u043b\u044b deploy-deb.json \u0438 deploy-rpm.json \u2014 \u044d\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u0435\u043f\u043b\u043e\u044f \u043d\u0430 bintray. \u042f \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0431\u0443\u0434\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u0441\u044e\u0434\u0430. \u041f\u0440\u0438\u043c\u0435\u0440 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 <a href=\"https:\/\/bintray.com\/docs\/api\/\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438. \u0421\u043a\u0440\u0438\u043f\u0442 <code>update-version.sh<\/code> \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043f\u043e\u0434\u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432 json \u0444\u0430\u0439\u043b\u0430\u0445 \u043d\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e.<\/p>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u044d\u0442\u0430\u043f\u0443 \u0434\u0435\u043f\u043b\u043e\u044f. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 bintray \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c generic, rpm \u0438 debian \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0430 bintray. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u043b\u043e\u043a, \u0440\u0435\u043b\u0438\u0437\u0438\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u043f\u043e \u0442\u0435\u0433\u0443 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 master-\u0432\u0435\u0442\u043a\u0438. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 mac \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f Rest API. Rest API Bintray \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043b\u0438\u0432\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0432 \u043f\u0440\u044f\u043c\u043e \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439. \u0414\u043b\u044f linux \u0441\u0431\u043e\u0440\u043e\u043a \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c bintray provider, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 Travis CI.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">deploy:   - provider: script     skip_cleanup: true     script:       cd target;       curl -X PUT -H X-GPG-PASSPHRASE:$PASSPHRASE_BINTRAY --basic -u aarrsseni:$BINTRAY_API_KEY https:\/\/api.bintray.com\/content\/aarrsseni\/release-test\/release-test\/$TRAVIS_TAG\/release-test-$TRAVIS_TAG.zip?publish=1     on:       branch: master       condition: $TRAVIS_OS_NAME == &quot;osx&quot;       tags: true   - provider: bintray     file: deploy-deb.json     user: aarrsseni     key:       secure: your_key     passphrase:       secure: your_passphrase     skip_cleanup: true     on:       branch: master       condition: $TRAVIS_OS_NAME == &quot;linux&quot;       tags: true   - provider: bintray     file: deploy-rpm.json     user: aarrsseni     key:       secure: your_key     passphrase:       secure: your_passphrase     skip_cleanup: true     on:       branch: master       condition: $TRAVIS_OS_NAME == &quot;linux&quot;       tags: true<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c zip \u0430\u0440\u0445\u0438\u0432, rpm \u0438 deb \u043f\u0430\u043a\u0435\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u043b\u0435\u0436\u0430\u0442 \u043d\u0430 bintray.<br \/>  \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 rpm \u0438 deb \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 <code>apt-get<\/code> \u0438 <code>yum<\/code>.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f mac \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>brew<\/code> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d <a href=\"https:\/\/github.com\/aarrsseni\/homebrew-test-release\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439<\/a>. \u041d\u0430 <a href=\"https:\/\/brew.sh\/index_ru\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u0430\u0439\u0442\u0435<\/a> \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440. \u041a\u0430\u043a \u043e\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/github.com\/aarrsseni\/homebrew-test-release\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  <\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b \u0434\u043b\u044f <code>brew<\/code> \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0435 <code>Formula<\/code>. \u041c\u043e\u0439 \u0444\u0430\u0439\u043b \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>release-test.rb<\/code>. \u041e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 zip \u0430\u0440\u0445\u0438\u0432 \u043d\u0430 bintray, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438 \u0447\u0435\u043a\u0441\u0443\u043c\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0440\u0435\u043b\u0438\u0437\u0435.<\/p>\n<p>  <\/p>\n<pre><code class=\"ruby\">class ReleaseTest &lt; Formula   desc &quot;Your desc&quot;   homepage &quot;your website&quot;   url &quot;https:\/\/bintray.com\/aarrsseni\/release-test\/download_file?file_path=release-test-1.70.zip&quot;   sha256 &quot;84b09c9c1c45ef0b040811be58c9f14cf8ef7237139f0a8483ccd85c6ea1bb64&quot;    bottle :unneeded    def install     libexec.install Dir[&quot;*&quot;]     bin.install_symlink libexec\/&quot;bin\/release-test&quot;   end    test do     system &quot;release-test&quot;   end end<\/code><\/pre>\n<p>  <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043c\u0435\u043d\u044f\u0442\u044c \u0447\u0435\u043a\u0441\u0443\u043c\u043c\u0443 \u0440\u0443\u043a\u0430\u043c\u0438, \u0432 <code>.travis.yml<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u043b\u043e\u043a <code>after_deploy<\/code>.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">after_deploy:  - if [ $TRAVIS_OS_NAME == &quot;osx&quot; ]; then   chmod +x .\/update-homebrew.sh;   .\/update-homebrew.sh;   fi<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u0441\u043a\u0440\u0438\u043f\u0442\u0435 <code>update-homebrew.sh<\/code> \u043c\u044b \u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c <code>brew<\/code> \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u0447\u0435\u043a\u0441\u0443\u043c\u043c\u0443 \u0434\u043b\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0434\u0435\u043f\u043b\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0435\u0435.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">#!\/usr\/bin\/env bash NAME=$(basename $(find . -type f -name 'release-test-*.zip')) echo ${NAME} mkdir temp-homebrew  CHECKSUM=$(echo &quot;$(shasum -a 256 target\/${NAME})&quot; | awk '{print $1;}') echo ${CHECKSUM}  cd temp-homebrew git clone https:\/\/github.com\/aarrsseni\/homebrew-test-release cd homebrew-test-release git remote add origin-deploy https:\/\/${GITHUB_TOKEN}@github.com\/aarrsseni\/homebrew-test-release.git cd Formula  cat release-test.rb  PREV_NAME=$(grep -o 'file_path=.*$' release-test.rb | cut -c11-) PREV_NAME=${PREV_NAME%?}  PREV_CHECKSUM_FROM_FILE=$(grep -o 'sha256.*$' release-test.rb | cut -c9-) PREV_CHECKSUM=${PREV_CHECKSUM_FROM_FILE%?}  echo ${PREV_NAME} echo ${PREV_CHECKSUM}  sed -i '.bak' &quot;s\/$PREV_NAME\/$NAME\/g&quot; release-test.rb  sed -i '.bak' &quot;s\/$PREV_CHECKSUM\/$CHECKSUM\/g&quot; release-test.rb  cat release-test.rb  git add . git commit -m &quot;Update formula version&quot; git push origin-deploy master<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043a \u0441\u0435\u0431\u0435 \u043d\u0430 mac \u0433\u043e\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>brew install USERNAME\/REPO_NAME\/TOOL_NAME<\/code>, \u0433\u0434\u0435 USERNAME \u2014 \u0438\u043c\u044f \u043d\u0430 github, REPO_NAME \u2014 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u0430 TOOL_NAME \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p>\u0421\u0442\u043e\u0438\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043d\u0430 github \u0438 bintray \u0432 <code>.travis.yml<\/code> \u043d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0438 \u043a\u043b\u044e\u0447\u0438.<\/p>\n<p>  <\/p>\n<h2 id=\"podvedem-itog\">\u041f\u043e\u0434\u0432\u0435\u0434\u0435\u043c \u0438\u0442\u043e\u0433<\/h2>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0435 <code>mvn release:prepare<\/code> \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0443 \u0441 \u0442\u0435\u0433\u043e\u043c \u043c\u044b \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0443 native image \u0434\u043b\u044f mac \u0438 linux, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0443 \u043f\u0440\u044f\u043c\u0438\u043a\u043e\u043c \u043a \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e.<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/github.com\/aarrsseni\/release-test\">\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441 \u0438\u0441\u0445\u043e\u0434\u044b\u043c \u043a\u043e\u0434\u043e\u043c<\/a><br \/>  <a href=\"https:\/\/github.com\/aarrsseni\/homebrew-test-release\">\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0434\u043b\u044f homebrew<\/a><\/p>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/501306\/\"> https:\/\/habr.com\/ru\/post\/501306\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/501306\/\">\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0447\u0443 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043e\u043f\u044b\u0442 \u043f\u043e \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0435 Graal Native Image \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c Mac OS \u0438 Linux \u0432 \u043e\u0434\u043d\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Travis CI.<\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439, \u044f \u043e\u0449\u0443\u0442\u0438\u043b \u043d\u0435\u0445\u0432\u0430\u0442\u043a\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043e\u043f\u044b\u0442 \u0437\u0434\u0435\u0441\u044c.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0436\u0430\u043b\u0443\u0439 \u043d\u0430\u0447\u043d\u0435\u043c.<\/p>\n<p>  <\/p>\n<p>\u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c:<\/p>\n<p>  <\/p>\n<ul>\n<li>Java \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043c\u0438 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 native image.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u0445\u043e\u0447\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0421\u043e\u0431\u0440\u0430\u0442\u044c native image \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Travis<\/li>\n<li>\u0421\u043e\u0431\u0440\u0430\u0442\u044c rpm \u0438 deb \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0430\u0440\u0445\u0438\u0432 \u0434\u043b\u044f mac \u0432\u0435\u0440\u0441\u0438\u0438<\/li>\n<li>\u0417\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u043d\u0430 Bintray<\/li>\n<li>\u0414\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u043a\u0435\u0442\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440<\/li>\n<li>\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441.<\/li>\n<\/ul>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-303319","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/303319","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=303319"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/303319\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=303319"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=303319"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=303319"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}