<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Allan C. M. Lira</title>
    <description>The latest articles on Forem by Allan C. M. Lira (@acmlira).</description>
    <link>https://forem.com/acmlira</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F437361%2F9ac6bb08-8761-4890-9690-9700a5856350.jpeg</url>
      <title>Forem: Allan C. M. Lira</title>
      <link>https://forem.com/acmlira</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/acmlira"/>
    <language>en</language>
    <item>
      <title>Creating Java CI with Maven</title>
      <dc:creator>Allan C. M. Lira</dc:creator>
      <pubDate>Wed, 22 Jul 2020 17:48:41 +0000</pubDate>
      <link>https://forem.com/acmlira/creating-java-ci-with-maven-4l08</link>
      <guid>https://forem.com/acmlira/creating-java-ci-with-maven-4l08</guid>
      <description>&lt;h1&gt;
  
  
  Creating Java CI with Maven
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;with GitHub Actions&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In recent years, tools like Travis CI and CircleCI have set out to solve the problem behind the CI/CD building. Often confusing for devs who had to switch sites again and again, these tools created the need to be added to the repository page. Since 2019, &lt;a href="https://github.blog/2019-08-08-github-actions-now-supports-ci-cd/" rel="noopener noreferrer"&gt;&lt;em&gt;GitHub Actions&lt;/em&gt; has support for CI/CD&lt;/a&gt; and now makes it easier to automate how we build, test, and deploy our projects. In this tutorial, we are going to build a CI/CD pipeline to deploy a Java application with &lt;a href="https://github.com/TotalCross/totalcross" rel="noopener noreferrer"&gt;TotalCross&lt;/a&gt; but you can use into your favorite framework/vanilla project. It's quite generic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.blog%2Fwp-content%2Fuploads%2F2019%2F08%2FDL-V2-LinkedIn_FB.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.blog%2Fwp-content%2Fuploads%2F2019%2F08%2FDL-V2-LinkedIn_FB.png" alt="GitHub Actions CI/CD banner"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;TotalCross is a cross-platform free open source GUI creator and will be very helpful for us in this tutorial. How about starting in just 8 minutes? &lt;a href="https://totalcross.com/" rel="noopener noreferrer"&gt;See more about TotalCross&lt;/a&gt;, the fastest way to build GUI! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftotalcross.com%2Fstatic%2FTotalCrossHelloWorld-1f0f67a1d4a91788980586e19a48a7d6.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ftotalcross.com%2Fstatic%2FTotalCrossHelloWorld-1f0f67a1d4a91788980586e19a48a7d6.gif" alt="TotalCross code sample GIF"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's get start
&lt;/h2&gt;

&lt;p&gt;The next steps may be easier if you get &lt;a href="https://learn.totalcross.com/documentation/get-started" rel="noopener noreferrer"&gt;TotalCross get started&lt;/a&gt;. After you create your Java with Maven project in any IDE of your choice and you upload the repository to GitHub, you only need to open the &lt;em&gt;Actions&lt;/em&gt; dashboard:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2F99M30wg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2F99M30wg.jpg" alt="Imgur"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let's set up our own workflow:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FbLWN0cb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FbLWN0cb.jpg" alt="Imgur"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can choose the name of your file. Let's call it &lt;code&gt;ci.yml&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FjroO3fI.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FjroO3fI.jpg" alt="Imgur"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Right below we can edit our pipeline descriptor file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your workflow file
&lt;/h2&gt;

&lt;p&gt;I recommend copy and paste the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Java CI with Maven&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;master&lt;/span&gt; &lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;master&lt;/span&gt; &lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;

    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkout&lt;/span&gt;
      &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v2&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Set up JDK&lt;/span&gt;
      &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-java@v1&lt;/span&gt;
      &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;java-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.8&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build with Maven&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mvn package&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Archive results&lt;/span&gt;
      &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/upload-artifact@v1&lt;/span&gt;
      &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;artifacts&lt;/span&gt;
        &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;target/install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We need to talk about some lines to make it available to your customized options. Line-by-line:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Line&lt;/th&gt;
&lt;th&gt;Word&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;01&lt;/td&gt;
&lt;td&gt;&lt;code&gt;name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;set the task title in the action pane&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;03&lt;/td&gt;
&lt;td&gt;&lt;code&gt;on&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;and its subsequent lines define the triggers for starting the task, is required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;09&lt;/td&gt;
&lt;td&gt;&lt;code&gt;jobs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;groups one or more tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;&lt;code&gt;build&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;it's our only task, you could call it by some other name like &lt;code&gt;apple-juice&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;&lt;code&gt;runs-on&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;defines the host machine's operating system, with TotalCross you can generate applications for Windows, android, iOS and more&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;&lt;code&gt;steps&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;the next lines starting with &lt;code&gt;-&lt;/code&gt; define items. For each item a &lt;code&gt;uses&lt;/code&gt; or&lt;code&gt;run&lt;/code&gt; is required as "minimum requirement"&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Let's take a closer look at the &lt;code&gt;steps&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;uses&lt;/code&gt; a &lt;a href="https://github.com/marketplace?type=actions" rel="noopener noreferrer"&gt;Marketplace&lt;/a&gt; action to checkout the project;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;uses&lt;/code&gt; another community action to install the JDK. The version can be changed on &lt;strong&gt;line 20&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;Runs the necessary command for Maven &lt;em&gt;build&lt;/em&gt;. Switch to the command you already use on &lt;strong&gt;line 22&lt;/strong&gt;, something like &lt;code&gt;mvn -B package --file pom.xml&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;The last step only exports the resulting artifacts. They can be used by other jobs. You can change the path to the artifacts on &lt;strong&gt;line 27&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We need to commit the changes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FX7lTCfe.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FX7lTCfe.jpg" alt="Imgur"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then we need to return to &lt;em&gt;Actions&lt;/em&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FECJvzZ7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FECJvzZ7.jpg" alt="Imgur"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wait a few minutes until the work is finished and the artifacts are available:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FOg0c4Fn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FOg0c4Fn.jpg" alt="Imgur"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Download the artifacts and test! &lt;/p&gt;

&lt;h2&gt;
  
  
  You might like
&lt;/h2&gt;

&lt;p&gt;GitHub actions is a very powerful tool and is being improved very quickly, visit the &lt;a href="https://docs.github.com/en/actions" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;. Some interesting features are already available. For example you may have job related badges in the repository README.md:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FvAtoxiY.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FvAtoxiY.jpg" alt="Imgur"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also create jobs for Test and Publish your projects, your starting point can be &lt;code&gt;run&lt;/code&gt; commands (they behave like shell commands) or knowing some community actions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/marketplace/actions/aws-cloudformation-deploy-cloudformation-stack-action-for-github-actions" rel="noopener noreferrer"&gt;AWS CloudFormation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/marketplace/actions/build-and-push-docker-images" rel="noopener noreferrer"&gt;Docker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you liked this article, please clap and share your comments below! Did you like the TotalCross project? &lt;a href="https://github.com/TotalCross/totalcross" rel="noopener noreferrer"&gt;Support us with a star&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Thanks a lot!&lt;/p&gt;

</description>
      <category>java</category>
      <category>ci</category>
      <category>maven</category>
      <category>github</category>
    </item>
  </channel>
</rss>
