<?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: Kailash Nirmal</title>
    <description>The latest articles on Forem by Kailash Nirmal (@kailashnirmal).</description>
    <link>https://forem.com/kailashnirmal</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%2F1423000%2Fef6f3dd6-9edc-4be2-a561-4dc2888039e8.jpg</url>
      <title>Forem: Kailash Nirmal</title>
      <link>https://forem.com/kailashnirmal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/kailashnirmal"/>
    <language>en</language>
    <item>
      <title>Deep Dive: Maven Build Lifecycle &amp; the Truth About -DskipTests</title>
      <dc:creator>Kailash Nirmal</dc:creator>
      <pubDate>Thu, 05 Mar 2026 10:26:05 +0000</pubDate>
      <link>https://forem.com/kailashnirmal/deep-dive-maven-build-lifecycle-the-truth-about-dskiptests-522e</link>
      <guid>https://forem.com/kailashnirmal/deep-dive-maven-build-lifecycle-the-truth-about-dskiptests-522e</guid>
      <description>&lt;h2&gt;
  
  
  A practical breakdown of what Maven does behind the scenes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Why Every Java Developer Should Understand mvn clean install? Well &lt;br&gt;
Every Java developer types &lt;code&gt;mvn clean install&lt;/code&gt;dozens of times a day. But how many of us actually know what happens behind the scenes?&lt;/p&gt;

&lt;p&gt;So let's check out :) &lt;/p&gt;

&lt;p&gt;First of all, mvn clean install executes two Maven lifecycle phases in sequence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;clean&lt;/strong&gt; Lifecycle&lt;/p&gt;

&lt;p&gt;Maven first runs the clean lifecycle, which has 3 phases:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Febr4kkwn3dtox3fqdqdy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Febr4kkwn3dtox3fqdqdy.png" alt="Three phases" width="800" height="192"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;install&lt;/strong&gt; Lifecycle (Default Lifecycle)&lt;/p&gt;

&lt;p&gt;Then Maven runs the default lifecycle up to the install phase, executing every phase in order:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7pypl8ookjxcf754ycmo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7pypl8ookjxcf754ycmo.png" alt="Install Phases" width="800" height="622"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj526uelsnmqn72ho2opy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj526uelsnmqn72ho2opy.png" alt="Install phases continues" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Diagram for Better Understanding :
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqxmg1px8u0wemq85xpv8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqxmg1px8u0wemq85xpv8.png" alt="Diagram1" width="800" height="646"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs369n3dg8w13zwhmnl6r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs369n3dg8w13zwhmnl6r.png" alt="Diagram 2" width="800" height="745"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Does it skip tests?
&lt;/h2&gt;

&lt;p&gt;No — by default, mvn clean install does NOT skip tests. The test phase runs automatically.&lt;/p&gt;

&lt;p&gt;To skip tests, you have two options:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Skip test EXECUTION (but still compiles tests)
mvn clean install -DskipTests

# Skip test COMPILATION + execution entirely
mvn clean install -Dmaven.test.skip=true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq1dorvm7elvfuzeq9p6f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq1dorvm7elvfuzeq9p6f.png" alt="Flag" width="800" height="204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;mvn clean install&lt;/code&gt;runs the clean lifecycle first, then the default lifecycle up to &lt;code&gt;install&lt;/code&gt;&lt;br&gt;
Tests are a core part of the lifecycle and run by default — never skipped unless you explicitly ask&lt;br&gt;
&lt;code&gt;-DskipTests&lt;/code&gt; is a Maven build property (not a JVM property) consumed by the Surefire Plugin&lt;br&gt;
&lt;code&gt;-DskipTests skips&lt;/code&gt; execution only — test classes are still compiled&lt;br&gt;
Use &lt;code&gt;-Dmaven.test.skip=true&lt;/code&gt; when you want the fastest possible build&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; &lt;em&gt;This blog is based on my personal understanding and learning. There may be variations in the actual flow depending on your Maven version or project configuration. I encourage you to verify with the official Maven documentation. I hope this was helpful in your learning journey!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Thank you so much for taking the time to read this blog. I hope it added some value to your learning journey!&lt;br&gt;
With regards,&lt;br&gt;
JavaCharter | Kailash&lt;br&gt;
Happy Coding! ☕💻&lt;/p&gt;

</description>
      <category>maven</category>
      <category>mvn</category>
      <category>dskiptests</category>
      <category>buildtool</category>
    </item>
    <item>
      <title>How to Write a Clean, Professional README.md (A Practical Guide for Developers)</title>
      <dc:creator>Kailash Nirmal</dc:creator>
      <pubDate>Thu, 15 Jan 2026 10:44:28 +0000</pubDate>
      <link>https://forem.com/kailashnirmal/how-to-write-a-clean-professional-readmemd-a-practical-guide-for-developers-2o47</link>
      <guid>https://forem.com/kailashnirmal/how-to-write-a-clean-professional-readmemd-a-practical-guide-for-developers-2o47</guid>
      <description>&lt;p&gt;Hello Everyone! 👋&lt;br&gt;
Hope you all are doing great — and Happy New Year 2026! 🎉&lt;br&gt;
This is my very first blog of 2026, and I’m really excited to share it with you all.&lt;br&gt;
I decided to write this blog because I recently faced a few unexpected challenges while working on a ENVIRONMENT_SETUP.md document inside my STS IDE. When I clicked on the Preview tab, some parts of my Markdown were not rendering the way I expected — titles were broken, bold text didn’t appear, XML was escaped, and new lines didn’t show correctly.&lt;br&gt;
If you’ve ever edited Markdown directly inside an IDE and wondered why the preview looks strange… trust me, you’re not alone!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxzggj92auco2yu0n5gl5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxzggj92auco2yu0n5gl5.png" alt=" " width="670" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A good README.md is the face of your project. It tells readers what your project is, how to set it up, how to use it, and why it matters. Whether you’re working on open-source, enterprise codebases, or internal tools, a clear README saves time for your team, future contributors, and even your future self.&lt;br&gt;
In this guide, I’ll walk you through how to write a clean, professional README using Markdown — including titles, bold text, code blocks, XML formatting, line breaks, and preview screenshots from any standard IDE or Markdown viewer.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Start With a Strong Title
&lt;/h2&gt;

&lt;p&gt;Use a single # at the top for the main project title:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffl5o87b0ybrcldvgkne5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffl5o87b0ybrcldvgkne5.png" alt=" " width="613" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will render as a big, bold page title.&lt;br&gt;
Example (rendered):&lt;/p&gt;

&lt;h2&gt;
  
  
  My Awesome Project
&lt;/h2&gt;

&lt;h2&gt;
  
  
  2. Use Headings to Structure the Document
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhuifwfenyb0hdrvh4w2k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhuifwfenyb0hdrvh4w2k.png" alt=" " width="433" height="204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ur2b2e67rax3jxezifu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ur2b2e67rax3jxezifu.png" alt=" " width="619" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Rendered:&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Headings help readers quickly scan your documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Use Bold Text for Important Highlights
&lt;/h2&gt;

&lt;p&gt;For bold text without creating a heading, wrap the text with **:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frlmcyvpqgxovp31x8rsr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frlmcyvpqgxovp31x8rsr.png" alt=" " width="640" height="217"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Rendered:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is bold text&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Use Code Blocks to Show Commands, XML, JSON, YAML, etc.
&lt;/h2&gt;

&lt;p&gt;This is one of the most important parts of a README.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi7lfhsoljawx5stzy1f4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi7lfhsoljawx5stzy1f4.png" alt=" " width="583" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;then&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faxqu0f7l5rv73fv2695h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faxqu0f7l5rv73fv2695h.png" alt="Code block with language" width="654" height="292"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcouwq9h7moxjguabfvic.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcouwq9h7moxjguabfvic.png" alt="Rendering" width="700" height="288"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. How to Write XML in README (Without Breaking It)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffacxawtga0jm84u0vkqw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffacxawtga0jm84u0vkqw.png" alt="write XML" width="676" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. How to Add a New Line in Markdown
&lt;/h2&gt;

&lt;p&gt;Markdown ignores single newlines. Here are correct ways to force them:&lt;/p&gt;

&lt;p&gt;a) Two spaces at the end of a line&lt;/p&gt;

&lt;p&gt;Line 1␣␣&lt;br&gt;
Line 2&lt;/p&gt;

&lt;p&gt;b) Use &lt;br&gt;&lt;/p&gt;

&lt;p&gt;Line 1&lt;br&gt;&lt;br&gt;
Line 2&lt;/p&gt;

&lt;p&gt;c) Blank line (paragraph break)&lt;/p&gt;

&lt;p&gt;Line 1&lt;/p&gt;

&lt;p&gt;Line 2&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Use Lists for Steps or Bullet Points
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7p8omtl8kt9t0ums6bj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7p8omtl8kt9t0ums6bj.png" alt="Unordered list&amp;lt;br&amp;gt;
" width="690" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0zdebftp0cydnh9ksdtc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0zdebftp0cydnh9ksdtc.png" alt="Ordered List" width="700" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Show File Paths, Commands, or One‑Line Code Using Inline Code
&lt;/h2&gt;

&lt;p&gt;Use backticks ` around short snippets.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgwjxbuqn45z8vvidn4jp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgwjxbuqn45z8vvidn4jp.png" alt=" " width="679" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Write a Clean Structure (Recommended Format)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpm8qerpxkpqjjgb54iwz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpm8qerpxkpqjjgb54iwz.png" alt="title of projects" width="517" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Previewing Your README
&lt;/h2&gt;

&lt;p&gt;Most IDEs support Markdown preview:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;VS Code:&lt;br&gt;
Ctrl + Shift + V → Open Preview&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;IntelliJ / STS / WebStorm:&lt;br&gt;
Built-in Markdown preview panel&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GitHub/GitLab:&lt;br&gt;
Automatically renders README.md&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Always preview your README before committing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;A good README is a small investment with a huge return.&lt;br&gt;
It improves collaboration, reduces onboarding time, and makes your project more usable and understandable.&lt;br&gt;
By mastering simple Markdown tricks — headings, bold text, line breaks, XML blocks — you instantly level up the professionalism of your documentation.&lt;/p&gt;

&lt;p&gt;Thanks,&lt;br&gt;
Kailash&lt;br&gt;
JavaCharter&lt;br&gt;
Happy Coding!!&lt;/p&gt;

</description>
      <category>readme</category>
      <category>mdfile</category>
      <category>documentation</category>
      <category>devops</category>
    </item>
    <item>
      <title>My Experience with Azure Certification Renewal: Key Topics, Sample Questions, and Tips</title>
      <dc:creator>Kailash Nirmal</dc:creator>
      <pubDate>Wed, 03 Dec 2025 05:35:53 +0000</pubDate>
      <link>https://forem.com/kailashnirmal/my-experience-with-azure-certification-renewal-key-topics-sample-questions-and-tips-5h90</link>
      <guid>https://forem.com/kailashnirmal/my-experience-with-azure-certification-renewal-key-topics-sample-questions-and-tips-5h90</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Recently, I completed the renewal exam for my Azure certification, and I wanted to share my experience to help others prepare. The renewal process is free, online, and focuses on validating your knowledge of the latest Azure features and best practices.&lt;/p&gt;

&lt;p&gt;In this blog, I’ll cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What’s included in the renewal exam&lt;/li&gt;
&lt;li&gt;Key areas you should focus on&lt;/li&gt;
&lt;li&gt;A few sample questions with explanations&lt;/li&gt;
&lt;li&gt;Tips to prepare effectively&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What’s Included in the Renewal Exam?
&lt;/h2&gt;

&lt;p&gt;The renewal exam is scenario-based and tests your practical understanding of Azure services. It’s not about memorizing definitions—it’s about applying concepts to real-world situations.&lt;br&gt;
&lt;strong&gt;Topics covered in my renewal exam included:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Azure App Configuration (feature flags, labels)&lt;/li&gt;
&lt;li&gt;Application Insights (sampling, metrics, availability tests)&lt;/li&gt;
&lt;li&gt;Azure Container Apps &amp;amp; Container Instances&lt;/li&gt;
&lt;li&gt;Azure Functions (C#, Python triggers and bindings)&lt;/li&gt;
&lt;li&gt;Azure Storage &amp;amp; Cosmos DB (soft delete, partition keys, consistency levels)&lt;/li&gt;
&lt;li&gt;Identity and Security (Managed Identity, RBAC)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Sample Questions and Explanations
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Azure App Configuration – Feature Flags&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;u&gt;Question:&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;You need to implement a feature flag in Azure App Configuration. Which two properties are required?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name&lt;/li&gt;
&lt;li&gt;List of filters&lt;/li&gt;
&lt;li&gt;Labels&lt;/li&gt;
&lt;li&gt;Keys and values&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Answer:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Name &lt;br&gt;
List of filters&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Feature flags require a unique name and conditions (filters) to determine when the feature is enabled.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Application Insights – Reduce Telemetry&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;u&gt;Question&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;Your app sends large telemetry volumes, and Application Insights is throttling data. How do you reduce traffic while maintaining statistical accuracy?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sampling&lt;/li&gt;
&lt;li&gt;Distributed tracing&lt;/li&gt;
&lt;li&gt;Metric alerts&lt;/li&gt;
&lt;li&gt;Log search alerts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Answer:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sampling&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Adaptive sampling reduces telemetry volume while preserving representative data.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Azure Container Instances – SMB Access&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;u&gt;Question:&lt;br&gt;
&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;You need to access data from a container using SMB protocol. What should you use?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;YAML file&lt;/li&gt;
&lt;li&gt;Container group&lt;/li&gt;
&lt;li&gt;Azure File share&lt;/li&gt;
&lt;li&gt;Environment variable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Answer:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Azure File share.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Azure Files supports SMB and can be mounted inside containers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tips for Success
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Focus on practical scenarios: Understand how services work together (e.g., Managed Identity with Azure SQL).&lt;/li&gt;
&lt;li&gt;Review documentation: Microsoft Learn and official docs are your best resources.&lt;/li&gt;
&lt;li&gt;Practice with real examples: Try configuring feature flags, enabling sampling, or mounting Azure File shares.&lt;/li&gt;
&lt;li&gt;Don’t memorize—understand: The exam checks applied knowledge, not rote learning.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;The renewal exam is a great way to stay current with Azure. It’s free, quick, and ensures you’re up to date with best practices. I’ve attached my result screenshot below to share my achievement and motivate others to renew their certifications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Screenshot for my result
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffob431wq44l9a1ps1qnv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffob431wq44l9a1ps1qnv.png" alt=" " width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6y19hyaleyest56kb7ss.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6y19hyaleyest56kb7ss.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9hocda6f9nstrjymdc26.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9hocda6f9nstrjymdc26.png" alt=" " width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks,&lt;br&gt;
Kailash&lt;br&gt;
JavaCharter&lt;/p&gt;

&lt;p&gt;Hope this was helpful!!&lt;/p&gt;

</description>
      <category>azure</category>
      <category>azure204</category>
      <category>certification</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Integrating Checkstyle into Your Maven Project for Clean and Consistent Code</title>
      <dc:creator>Kailash Nirmal</dc:creator>
      <pubDate>Tue, 10 Jun 2025 12:21:21 +0000</pubDate>
      <link>https://forem.com/kailashnirmal/integrating-checkstyle-into-your-maven-project-for-clean-and-consistent-code-12am</link>
      <guid>https://forem.com/kailashnirmal/integrating-checkstyle-into-your-maven-project-for-clean-and-consistent-code-12am</guid>
      <description>&lt;p&gt;&lt;strong&gt;🧩 Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Inconsistent code style can slow down collaboration in teams of 10+ developers, costing hours in reviews.&lt;/p&gt;

&lt;p&gt;In modern software development, a clean and consistent codebase isn’t just nice to have—it’s a necessity. Inconsistent formatting, missing Javadoc, or poorly structured code can slow down collaboration, introduce bugs, and make maintenance a nightmare, especially in large teams or long-term projects. This is where Checkstyle comes into picture!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔍 What is Checkstyle?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Checkstyle is a static code analysis tool for Java that helps developers follow coding standards. It automatically checks your code against a set of rules and flags any violations, such as incorrect indentation, naming conventions, or missing documentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧠 Why is Code Style Important?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In large teams, developers often have different coding habits. Without a unified style:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Code becomes harder to read and maintain.&lt;/li&gt;
&lt;li&gt;Merge conflicts increase.&lt;/li&gt;
&lt;li&gt;Bugs are more likely to slip through.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By enforcing a consistent style, teams can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improve code readability.&lt;/li&gt;
&lt;li&gt;Reduce onboarding time for new developers.&lt;/li&gt;
&lt;li&gt;Enhance collaboration and maintainability.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;⚙️ Why Use Maven Plugins?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Maven is a powerful build automation tool. By integrating Checkstyle as a Maven plugin, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatically run style checks during the build process.&lt;/li&gt;
&lt;li&gt;Fail builds on style violations.&lt;/li&gt;
&lt;li&gt;Integrate code quality checks into CI/CD pipelines.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🛠️ Step-by-Step Guide to Integrating maven-checkstyle-plugin&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ Step 1: Add the Plugin to Your pom.xml&lt;/p&gt;

&lt;p&gt;Insert the following configuration inside the  section of your pom.xml:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8vbc7g8f8t0xn1l89ad5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8vbc7g8f8t0xn1l89ad5.png" alt="pom.xml entries for the checkstyle" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This configuration ensures that Checkstyle runs during the validate phase and fails the build if any violations are found.&lt;/p&gt;

&lt;p&gt;✅ Step 2: Choose or Create a Checkstyle Configuration&lt;/p&gt;

&lt;p&gt;You can use a predefined configuration like:&lt;/p&gt;

&lt;p&gt;google_checks.xml&lt;br&gt;
sun_checks.xml&lt;/p&gt;

&lt;p&gt;Or create your own custom rules file. Example rules include:&lt;/p&gt;

&lt;p&gt;Maximum line length&lt;br&gt;
Naming conventions&lt;br&gt;
Javadoc requirements&lt;/p&gt;

&lt;p&gt;Place this file in your project’s root or src/main/resources directory.&lt;/p&gt;

&lt;p&gt;✅ Step 3: Run the Plugin&lt;/p&gt;

&lt;p&gt;You can run Checkstyle in two ways:&lt;/p&gt;

&lt;p&gt;Option 1: During Build&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mvn validate&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
This runs the plugin as part of the Maven lifecycle and shows violations in the console.&lt;/p&gt;

&lt;p&gt;This will trigger the plugin and display any violations in the console.&lt;/p&gt;

&lt;p&gt;Option 2: Generate a Detailed Report&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mvn checkstyle:checkstyle&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This generates a full HTML report.&lt;/p&gt;

&lt;h2&gt;
  
  
  📄 Where is the Report Generated?
&lt;/h2&gt;

&lt;p&gt;After running mvn checkstyle:checkstyle, the report is generated at:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;target/site/checkstyle.html&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Open this file in a browser to view a detailed, formatted report of all style violations.&lt;/p&gt;

&lt;p&gt;✅ Step 4: Review and Fix Violations&lt;/p&gt;

&lt;p&gt;If failsOnError is set to true, the build will fail on violations. Review the console output, fix the issues, and re-run the build.&lt;/p&gt;

&lt;p&gt;💡 Tips for Advanced Usage&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom Rules: Tailor the rules to match your team’s coding standards.&lt;/li&gt;
&lt;li&gt;IDE Integration: Use Checkstyle plugins for IntelliJ IDEA or Eclipse for real-time feedback.&lt;/li&gt;
&lt;li&gt;CI/CD Integration: Add mvn validate to your pipeline to enforce checks automatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ Benefits of Using Checkstyle&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enforces consistent code formatting.&lt;/li&gt;
&lt;li&gt;Catches potential issues early.&lt;/li&gt;
&lt;li&gt;Improves code readability and maintainability.&lt;/li&gt;
&lt;li&gt;Reduces technical debt over time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🏁 Conclusion&lt;/p&gt;

&lt;p&gt;Integrating maven-checkstyle-plugin into your Maven project is a simple yet powerful way to enforce coding standards and maintain a high-quality codebase. With just a few lines in your pom.xml, you can automate style checks and ensure your team writes clean, consistent, and maintainable code.&lt;/p&gt;

&lt;p&gt;I hope this post was helpful.&lt;/p&gt;

&lt;p&gt;Happy Coding!!&lt;/p&gt;

&lt;p&gt;Thanks,&lt;br&gt;
Kailash&lt;br&gt;
JavaCharter&lt;/p&gt;

</description>
      <category>maven</category>
      <category>checkstyle</category>
      <category>cleancode</category>
      <category>cleancoding</category>
    </item>
    <item>
      <title>Understanding Tags in Git and Their Importance on GitHub</title>
      <dc:creator>Kailash Nirmal</dc:creator>
      <pubDate>Tue, 04 Mar 2025 07:13:36 +0000</pubDate>
      <link>https://forem.com/kailashnirmal/understanding-tags-in-git-and-their-importance-on-github-5hj9</link>
      <guid>https://forem.com/kailashnirmal/understanding-tags-in-git-and-their-importance-on-github-5hj9</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hello Developers. I hope you all are enjoying the coding. Tags in Git are an essential feature that allows developers to mark specific points in their project history as important. This article explores what tags are, how to create and manage them, and why they are crucial for effective version control on platforms like GitHub.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Are Tags?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tags are references to specific commits in a Git repository. Unlike branches, which are mutable and can change over time, tags are intended to be immutable markers that capture a snapshot of your project at a particular point. They are commonly used to denote release versions (e.g., v1.0.0, v2.1.0) or significant milestones in the development process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Types of Tags:
&lt;/h2&gt;

&lt;p&gt;Lightweight Tags:&lt;/p&gt;

&lt;p&gt;A lightweight tag is essentially a bookmark to a specific commit. It does not carry any additional information.&lt;br&gt;
Created using the command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git tag &amp;lt;tag-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Annotated Tags:&lt;/p&gt;

&lt;p&gt;Annotated tags are stored as full objects in the Git database. They include the tagger's name, email, date, and a message, similar to a commit.&lt;/p&gt;

&lt;p&gt;Created using the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git tag -a &amp;lt;tag-name&amp;gt; -m "Tag message"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why Are Tags Important?
&lt;/h2&gt;

&lt;p&gt;Tags serve several important purposes in software development:&lt;/p&gt;

&lt;p&gt;1.Versioning:&lt;/p&gt;

&lt;p&gt;Tags provide a clear and organized way to version releases of your software. They allow users and developers to easily identify stable versions of the code.&lt;/p&gt;

&lt;p&gt;2.Release Management:&lt;/p&gt;

&lt;p&gt;Tags facilitate release management by marking significant milestones, such as beta versions, major updates, or patches.&lt;/p&gt;

&lt;p&gt;3.Easy Access to Previous States:&lt;/p&gt;

&lt;p&gt;Tags allow developers to quickly check out previous versions of the codebase. This is particularly useful for debugging or reverting to earlier states.&lt;/p&gt;

&lt;p&gt;4.Collaboration:&lt;br&gt;
In collaborative environments, tags help team members understand the progression of the project and the context of each release.&lt;/p&gt;

&lt;p&gt;5.Integration with CI/CD Pipelines:&lt;/p&gt;

&lt;p&gt;Tags can trigger deployment processes in Continuous Integration/Continuous Deployment (CI/CD) pipelines, ensuring that specific versions are deployed automatically.&lt;/p&gt;
&lt;h2&gt;
  
  
  How to Create and Manage Tags on GitHub
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Create a Tag Locally&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To create a new tag in your local repository, follow these steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open your terminal and navigate to your Git repository.&lt;/li&gt;
&lt;li&gt;Ensure you are on the branch you want to tag (e.g., master):
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Create an annotated tag:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git tag -a "v1.0.0" -m "Release version 1.0.0"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Step 2: Push the Tag to GitHub&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After creating a tag, push it to your remote repository on GitHub:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git push origin v1.0.0

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3: View Tags on GitHub&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to your GitHub repository in a web browser.&lt;/li&gt;
&lt;li&gt;Click on the "Code" tab, then go to the "Releases" section to see all tags listed.&lt;/li&gt;
&lt;li&gt;Click on any tag to view details about the associated commit and changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Delete Tags (if necessary)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you need to delete a tag, you can do so with the following commands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Delete the tag locally:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git tag -d v1.0.0

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Delete the tag from the remote repository:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git push --delete origin v1.0.0

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Best Practices for Using Tags
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use semantic versioning (e.g., MAJOR.MINOR.PATCH) for consistency.&lt;/li&gt;
&lt;li&gt;Write meaningful messages when creating annotated tags to provide context.&lt;/li&gt;
&lt;li&gt;Regularly review and clean up obsolete tags to keep your repository organized.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I hope you guys learnt something new today in your development activities. &lt;/p&gt;

&lt;p&gt;Happy Coding!&lt;/p&gt;

&lt;p&gt;Thanks,&lt;br&gt;
Kailash&lt;br&gt;
JavaCharter&lt;/p&gt;

</description>
      <category>github</category>
      <category>tags</category>
      <category>versioning</category>
      <category>git</category>
    </item>
    <item>
      <title>Understanding .gitignore: A Guide for Developers</title>
      <dc:creator>Kailash Nirmal</dc:creator>
      <pubDate>Thu, 30 Jan 2025 07:22:57 +0000</pubDate>
      <link>https://forem.com/kailashnirmal/understanding-gitignore-a-guide-for-developers-12e</link>
      <guid>https://forem.com/kailashnirmal/understanding-gitignore-a-guide-for-developers-12e</guid>
      <description>&lt;h2&gt;
  
  
  Introduction:
&lt;/h2&gt;

&lt;p&gt;As developers, we often find ourselves managing a variety of files in our projects. Not all of these files are meant to be shared with others, especially when working with version control systems like Git. This is where the .gitignore file comes into play. In this article, we'll explore what .gitignore is, why it's important, and how to use it effectively in your Git projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is .gitignore?
&lt;/h2&gt;

&lt;p&gt;The .gitignore file is a plain text file that tells Git which files or directories to ignore in a project. By listing specific files or patterns in this file, you can prevent them from being tracked by Git. This is particularly useful for files that are generated automatically, such as compiled code, log files, and temporary files that do not need to be shared with others.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is .gitignore Important?
&lt;/h2&gt;

&lt;p&gt;Using a .gitignore file is crucial for several reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Keep Your Repository Clean: Ignoring unnecessary files helps keep your repository tidy and focused on the source code that matters. This makes it easier for collaborators to understand the project structure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prevent Sensitive Information from Being Tracked: If your project contains configuration files with sensitive information (like API keys or passwords), adding these files to .gitignore prevents them from being accidentally committed to the repository.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reduce Repository Size: By ignoring large files or directories that are not needed for version control, you can keep the size of your repository manageable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid Merge Conflicts: Ignoring files that are automatically generated (like compiled binaries) helps prevent unnecessary merge conflicts when multiple people are working on the same project.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How to Use .gitignore
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Creating a .gitignore File&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Location:&lt;/strong&gt; The .gitignore file should be placed in the root directory of your Git repository.&lt;br&gt;
&lt;strong&gt;Naming:&lt;/strong&gt; Make sure to name the file .gitignore (with a dot at the beginning) so that Git recognizes it as a configuration file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Writing Rules in .gitignore
&lt;/h2&gt;

&lt;p&gt;The syntax for writing rules in a .gitignore file is straightforward. Here are some common patterns:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ignore Specific Files:&lt;/strong&gt; To ignore a specific file, simply write its name:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ftdb87wy2nruemggnzf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ftdb87wy2nruemggnzf.png" alt="secret.txt" width="669" height="66"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ignore All Files of a Type&lt;/strong&gt;: To ignore all files with a certain extension, use the asterisk * wildcard:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbslr5usam0to7rdwdxf4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbslr5usam0to7rdwdxf4.png" alt="asterisk * wildcard" width="800" height="87"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ignore a Directory:&lt;/strong&gt; To ignore an entire directory, add a forward slash / before the directory name:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fymvsmlkkzeoz58jbllio.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fymvsmlkkzeoz58jbllio.png" alt="/target/ inclusion" width="800" height="58"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ignore All Files in a Directory:&lt;/strong&gt; To ignore all files within a specific directory, use:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F644755x1ui0276wwuq1l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F644755x1ui0276wwuq1l.png" alt="Image description" width="751" height="64"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Example .gitignore File
&lt;/h2&gt;

&lt;p&gt;Here’s an example of a .gitignore file for a Java project:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbayzxoj24u51fxszrz9l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbayzxoj24u51fxszrz9l.png" alt="Image description" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Common Issues and Debugging&lt;/p&gt;

&lt;p&gt;When working with .gitignore, you might encounter some common issues:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Files Already Tracked:&lt;/strong&gt; If a file was already added to the repository before being added to .gitignore, it will still be tracked. To untrack it, use:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg09t56ga93154w6dv6oz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg09t56ga93154w6dv6oz.png" alt="Image description" width="664" height="67"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion:
&lt;/h2&gt;

&lt;p&gt;The .gitignore file is a powerful tool for managing your Git repository effectively. By understanding how to utilize it, you can keep your project clean, protect sensitive information, and ensure that only necessary files are tracked. Whether you are working on a small personal project or a large team collaboration, mastering .gitignore will streamline your development workflow.&lt;/p&gt;

&lt;p&gt;By following the guidelines in this article, you can avoid common pitfalls and take full advantage of the benefits that .gitignore provides. Happy coding!&lt;/p&gt;

&lt;p&gt;Thanks,&lt;br&gt;
JavaCharter&lt;br&gt;
Kailash Nirmal&lt;/p&gt;

</description>
      <category>gitignore</category>
      <category>gitprojects</category>
      <category>git</category>
      <category>versioncontrol</category>
    </item>
    <item>
      <title>Understanding CEO Fraud: A Growing Threat to Organisations</title>
      <dc:creator>Kailash Nirmal</dc:creator>
      <pubDate>Mon, 06 Jan 2025 10:50:18 +0000</pubDate>
      <link>https://forem.com/kailashnirmal/understanding-ceo-fraud-a-growing-threat-to-organisations-ekh</link>
      <guid>https://forem.com/kailashnirmal/understanding-ceo-fraud-a-growing-threat-to-organisations-ekh</guid>
      <description>&lt;p&gt;CEO fraud, also known as Business Email Compromise (BEC), is a type of cybercrime where an attacker impersonates a company's CEO or another high-ranking executive to trick employees into transferring money or sensitive information. This sophisticated form of fraud typically leverages social engineering tactics to create a sense of urgency and authority.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mechanisms of CEO Fraud:&lt;/strong&gt;&lt;br&gt;
&lt;u&gt;Email Spoofing:&lt;/u&gt; Attackers often craft emails that appear to come from a legitimate executive’s email address. These emails usually request urgent financial transactions or sensitive data.&lt;br&gt;
&lt;u&gt;Fake Invoices:&lt;/u&gt; Fraudsters may send invoices that look official, prompting the finance department to process payments without verifying their legitimacy.&lt;br&gt;
&lt;u&gt;Urgent Requests:&lt;/u&gt; These scams often involve messages that seem urgent, pushing employees to act quickly and bypass standard verification processes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Examples of CEO Fraud:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Ubiquiti Networks (2015):&lt;/em&gt;&lt;/strong&gt; This IT services company fell victim to a CEO fraud scheme where the scammers impersonated the company’s CEO and requested a transfer of $46.7 million. The fraud case involved a series of convincing emails that led to the transfer before the company realized it had been duped.&lt;br&gt;
&lt;strong&gt;&lt;em&gt;FACC (2016):&lt;/em&gt;&lt;/strong&gt;The Austrian aerospace supplier was another victim; it lost approximately €50 million when attackers impersonated its CEO. The scammers created an intricate web of fraudulent communications that led to sizeable unauthorized payments.&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Hewlett Packard Enterprises (HPE) (2019):&lt;/em&gt;&lt;/strong&gt; HPE was targeted in a CEO fraud incident where an employee was convinced to transfer money for an urgent acquisition. The scam was sophisticated, involving fake emails and plausible scenarios that led to the impersonation of senior executives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Preventive Measures:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To mitigate risks associated with CEO fraud, organizations should:&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Implement Email Verification Techniques:&lt;/em&gt;&lt;/strong&gt; Encourage employees to verify requests for transactions or sensitive information through a secondary channel (e.g., phone call).&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Educate Employees:&lt;/em&gt;&lt;/strong&gt; Conduct regular training sessions on recognizing potential scams and understanding the signs of email phishing.&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Enhance Cybersecurity Infrastructure:&lt;/em&gt;&lt;/strong&gt; Employ advanced security features in email systems, such as multi-factor authentication and threat detection tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;br&gt;
CEO fraud poses significant financial and reputational risks to organizations. By fostering a culture of awareness and implementing robust verification processes, companies can better protect themselves from falling victim to these deceptive schemes.&lt;/p&gt;

&lt;p&gt;I hope this was helpful.&lt;/p&gt;

&lt;p&gt;Thanks,&lt;br&gt;
Kailash&lt;br&gt;
JavaCharter&lt;/p&gt;

</description>
      <category>fraud</category>
      <category>ceofraud</category>
      <category>cybersecurity</category>
      <category>spoofing</category>
    </item>
    <item>
      <title>Understanding BCrypt: The Secure Way to Hash Passwords</title>
      <dc:creator>Kailash Nirmal</dc:creator>
      <pubDate>Thu, 12 Dec 2024 09:07:59 +0000</pubDate>
      <link>https://forem.com/kailashnirmal/understanding-bcrypt-the-secure-way-to-hash-passwords-aj5</link>
      <guid>https://forem.com/kailashnirmal/understanding-bcrypt-the-secure-way-to-hash-passwords-aj5</guid>
      <description>&lt;p&gt;In today's digital age, protecting our personal information is more crucial than ever, and one of the most important measures is securing our passwords. One way to achieve this is by using a technique called &lt;strong&gt;hashing&lt;/strong&gt;, and a popular method for hashing passwords is &lt;strong&gt;&lt;a href="https://en.wikipedia.org/wiki/Bcrypt" rel="noopener noreferrer"&gt;BCrypt&lt;/a&gt;&lt;/strong&gt;. Let’s break this down in simple terms.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is BCrypt?
&lt;/h2&gt;

&lt;p&gt;BCrypt is a special algorithm designed to convert plain-text passwords into a secure, unreadable format. This process is known as "hashing." When we hash a password, we transform it into a string of characters that does not resemble the original password in any way. The main advantage of hashing is that it makes it nearly impossible for someone who obtains the hashed value to figure out the original password.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Use BCrypt?
&lt;/h2&gt;

&lt;p&gt;Here are some important features that make BCrypt a preferred choice for password hashing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 Unique Salt:&lt;/strong&gt; Each time a password is hashed, BCrypt generates a random value called a "salt." This salt is added to the password before hashing. Even if two users have the same password, the salts will ensure that their hashed outputs are different. This prevents attackers from using precomputed lists (called rainbow tables) to crack passwords.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 Adjustable Work Factor:&lt;/strong&gt; BCrypt allows you to set the "work factor," which determines how computationally intensive the hashing process is. As computers become faster, you can increase this factor to make it harder for attackers to crack passwords.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3 One-Way Function:&lt;/strong&gt; Hashing is a one-way function, meaning you can't reverse the hashed output to get the original password back. This is essential for security because even if an attacker gains access to your hashed passwords, they cannot easily retrieve the original passwords.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Does It Work?
&lt;/h2&gt;

&lt;p&gt;Imagine you have a plain password, like "&lt;code&gt;mySecretPassword&lt;/code&gt;". When you use BCrypt, here's what happens:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 Salt Generation:&lt;/strong&gt; BCrypt creates a unique random salt.&lt;br&gt;
&lt;strong&gt;2 Hashing:&lt;/strong&gt; It combines your password with the salt and processes it through the BCrypt algorithm, producing a hashed password.&lt;br&gt;
&lt;strong&gt;3 Storage:&lt;/strong&gt; The hashed password (along with the salt) is then stored in the database.&lt;/p&gt;

&lt;p&gt;When a user attempts to log in, the process is reversed. The entered password is hashed again using the same salt, and the new hash is compared to the stored hash. If they match, the login is successful!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example Using Spring Boot&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let’s see how we can implement BCrypt in a simple Spring Boot application to hash and verify passwords.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Add Dependency&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First, make sure to include the Spring Security dependency in your &lt;code&gt;pom.xml&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;&amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;&amp;lt;artifactId&amp;gt;spring-boot-starter-security&amp;lt;/artifactId&amp;gt;&amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2: Hash a Password&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s how you can hash a password using BCrypt in a Spring Boot application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;

@Service
public class PasswordService {
    private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();

    public String hashPassword(String rawPassword) {
        return passwordEncoder.encode(rawPassword);
    }

    public boolean verifyPassword(String rawPassword, String hashedPassword) {
        return passwordEncoder.matches(rawPassword, hashedPassword);
    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Using the Service&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now, you can use this &lt;code&gt;PasswordService&lt;/code&gt;to hash and verify passwords. Here's a simple example in a controller:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api")
public class UserController {
    private final PasswordService passwordService;

    public UserController(PasswordService passwordService) {
        this.passwordService = passwordService;
    }

    @PostMapping("/register")
    public String register(@RequestParam String password) {
        String hashedPassword = passwordService.hashPassword(password);
        // Store hashedPassword in the database
        return "User registered with hashed password: " + hashedPassword;
    }

    @PostMapping("/login")
    public String login(@RequestParam String password, @RequestParam String storedHashedPassword) {
        boolean isMatch = passwordService.verifyPassword(password, storedHashedPassword);
        return isMatch ? "Login successful!" : "Invalid credentials.";
    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When a user registers, their plain password is hashed and stored.&lt;/li&gt;
&lt;li&gt;During login, the entered password is verified against the stored hashed password.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;BCrypt is a powerful and secure way to hash passwords that helps keep our personal information safe. By automatically generating salts and allowing for adjustable security measures, it stands out as a robust choice in the world of password management.&lt;br&gt;
With its one-way hashing capability, even if someone gains unauthorized access to our stored passwords, they won't be able to retrieve the originals. By implementing BCrypt in our applications, we can significantly enhance the security of user credentials and protect sensitive information.&lt;/p&gt;

&lt;p&gt;I hope this has enhanced your understanding of BCrypt.&lt;/p&gt;

&lt;p&gt;Happy Coding&lt;/p&gt;

&lt;p&gt;Happy Learning&lt;/p&gt;

&lt;p&gt;Thanks,&lt;br&gt;
Kailash&lt;br&gt;
JavaCharter&lt;/p&gt;

</description>
      <category>bcrypt</category>
      <category>password</category>
      <category>java</category>
      <category>hashed</category>
    </item>
    <item>
      <title>Understanding File Path Formats in Windows and Java for Cross-Platform Compatibility</title>
      <dc:creator>Kailash Nirmal</dc:creator>
      <pubDate>Fri, 15 Nov 2024 09:25:45 +0000</pubDate>
      <link>https://forem.com/kailashnirmal/understanding-file-path-formats-in-windows-and-java-for-cross-platform-compatibility-2im3</link>
      <guid>https://forem.com/kailashnirmal/understanding-file-path-formats-in-windows-and-java-for-cross-platform-compatibility-2im3</guid>
      <description>&lt;p&gt;In the development world, handling file paths correctly is crucial for ensuring applications function seamlessly across different operating systems. This article will explore the differences between using backslashes &lt;code&gt;(\)&lt;/code&gt; and forward slashes &lt;code&gt;(/)&lt;/code&gt;in file paths, particularly in the context of Windows and Java applications. We will discuss best practices for choosing the appropriate format based on the environment in which your application runs and provide practical examples to illustrate how to implement these principles effectively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File Path Formats in Windows&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Backslash &lt;code&gt;( \ )&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;In Windows operating systems, the backslash &lt;code&gt;(\)&lt;/code&gt; is the standard path separator. This is the conventional way to represent file paths.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;String downloadDir = "C:\\logs2\\";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Forward Slash &lt;code&gt;( / )&lt;/code&gt;:
&lt;/h2&gt;

&lt;p&gt;Interestingly, the forward slash &lt;code&gt;(/)&lt;/code&gt; is recognise as a path separator in Java and certain other programming languages, allowing developers to write cross-platform compatible code. Java utilises forward slashes internally for paths, which fosters consistent behaviour regardless of the operating system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;String downloadDir = "C:/logs2/";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Best Practices for Storing Paths&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When deciding which path format to use, consider the following guidelines:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For Windows-Only Applications:&lt;/strong&gt; If your application is designed to run exclusively on Windows, using backslashes is generally preferred. This aligns with Windows conventions and can help minimize confusion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example Code:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;String downloadDir = "C:\\logs2\\";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;For Cross-Platform Compatibility&lt;/strong&gt;: If your application needs to run on various operating systems, such as Windows, Linux, and macOS, it is common practice to utilize forward slashes. This approach ensures that your code remains compatible across different environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example Code:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;String downloadDir = "C:/logs2/";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Java Path Handling&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Java provides built-in classes such as &lt;code&gt;Path&lt;/code&gt;and &lt;code&gt;Files&lt;/code&gt;that can handle both backslashes and forward slashes correctly, regardless of how the paths are declared in your code. However, when displaying paths or passing them to external systems (e.g., shell commands, scripts), it is advisable to adhere to the standard that aligns with the target environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary :
&lt;/h2&gt;

&lt;p&gt;In summary, both backslashes and forward slashes serve their purposes depending on the operating system and requirements of your application. If your application will operate solely on Windows, using backslashes may be more conventional. However, for better portability and cross-platform compatibility in Java environments, it is recommended to use forward slashes.&lt;/p&gt;

&lt;p&gt;I hope this information was helpful. This article aims to provide clarity on how to effectively manage file paths in your applications to ensure maximum compatibility and efficiency.&lt;/p&gt;

&lt;p&gt;Thanks,&lt;br&gt;
Kailash&lt;br&gt;
JavaCharter&lt;/p&gt;

</description>
      <category>filepath</category>
      <category>windows</category>
      <category>crossplateform</category>
      <category>java</category>
    </item>
    <item>
      <title>The Importance of Using Interfaces for JpaRepository(Java Persistence API) in Spring Data JPA</title>
      <dc:creator>Kailash Nirmal</dc:creator>
      <pubDate>Fri, 18 Oct 2024 07:10:19 +0000</pubDate>
      <link>https://forem.com/kailashnirmal/the-importance-of-using-interfaces-for-jparepositoryjava-persistence-api-in-spring-data-jpa-459m</link>
      <guid>https://forem.com/kailashnirmal/the-importance-of-using-interfaces-for-jparepositoryjava-persistence-api-in-spring-data-jpa-459m</guid>
      <description>&lt;p&gt;Hello Programmers and beautiful people,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Have You Ever Thought About Why We Use Interfaces for JpaRepository in Spring Data JPA?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In modern application development, especially when it comes to data access layers, the architecture and design patterns we choose significantly impact maintainability, testability, and overall code quality. One prevalent practice in Spring Data JPA is the use of interfaces for&lt;br&gt;
&lt;code&gt;JpaRepository&lt;/code&gt; instead of concrete &lt;strong&gt;classes&lt;/strong&gt;. But why is this approach so beneficial? &lt;/p&gt;

&lt;p&gt;This article explores the reasoning behind using interfaces and the numerous advantages they offer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Abstraction
&lt;/h2&gt;

&lt;p&gt;At the core of software development lies the principle of abstraction. By defining an interface for the repository, developers create a contract that specifies what methods are available without dictating how those methods should be implemented. This abstraction allows different parts of an application to interact with the data layer without needing to understand the underlying implementation details. It promotes a clean separation of concerns, which is essential for building scalable software.&lt;/p&gt;

&lt;h2&gt;
  
  
  Flexibility with Multiple Implementations
&lt;/h2&gt;

&lt;p&gt;One compelling reason to use interfaces is the flexibility it affords. In certain scenarios, you may need different implementations of a repository for various data sources (e.g., relational databases, NoSQL databases, or in-memory data structures). By relying on an interface, developers can create multiple implementations while maintaining consistent behavior across the application. This capability is invaluable in environments that require adaptability as requirements evolve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enhanced Dependency Injection
&lt;/h2&gt;

&lt;p&gt;The Spring Framework excels at &lt;strong&gt;Dependency Injection (DI)&lt;/strong&gt;, and using interfaces aligns perfectly with this feature. When repositories are defined as interfaces, Spring can manage the concrete implementations automatically. This enables developers to switch implementations effortlessly without altering the calling code. If a change in the data source is required, such as migrating from one database to another, only the implementation needs to be updated while the application remains untouched.&lt;/p&gt;

&lt;h2&gt;
  
  
  Promoting Extensibility
&lt;/h2&gt;

&lt;p&gt;With interfaces, extending functionality becomes straightforward. Developers can create new repository interfaces that add custom query methods or extend existing ones without affecting the original repository structure. This extensibility ensures that, as new business requirements arise, developers can respond quickly without needing to refactor existing code extensively.&lt;/p&gt;

&lt;h2&gt;
  
  
  Improved Testability
&lt;/h2&gt;

&lt;p&gt;Testing is a fundamental component of software development, and interfaces enhance this aspect significantly. By allowing for the creation of mock implementations during unit testing, developers can isolate tests from the actual data layer. This isolation leads to more reliable tests, as changes in the data access code do not impact other components of the application. With interfaces, mocking and verifying behaviors in tests become seamless, thereby increasing the robustness of the testing strategy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reducing Boilerplate Code:
&lt;/h2&gt;

&lt;p&gt;One of the most notable advantages of using interfaces with Spring Data JPA is the reduction of boilerplate code. Spring Data automatically generates the implementation of the repository interface at runtime, liberating developers from writing repetitive CRUD (Create, Read, Update, Delete) operations. This feature not only boosts productivity but also minimizes human error, ensuring that common patterns are consistently followed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The practice of utilizing interfaces for &lt;code&gt;JpaRepository&lt;/code&gt;&lt;br&gt;
within Spring Data JPA is not merely a stylistic choice; it encompasses various principles and benefits that enhance software development. With improved flexibility, reduced boilerplate code, and an emphasis on testability and maintainability, using interfaces fosters a cleaner, more efficient architecture for data access layers. As software systems continue to evolve and grow in complexity, adopting this practice will serve developers well in building robust, adaptable applications.&lt;/p&gt;

&lt;p&gt;I hope this information was helpful and knowledgable.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Regards,&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;Kailash Nirmal&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;JavaCharter&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Learn about Interface JpaRepository:&lt;br&gt;
&lt;a href="https://docs.spring.io/spring-data/jpa/docs/current/api/org/springframework/data/jpa/repository/JpaRepository.html" rel="noopener noreferrer"&gt;https://docs.spring.io/spring-data/jpa/docs/current/api/org/springframework/data/jpa/repository/JpaRepository.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reference Document :&lt;br&gt;
&lt;a href="https://docs.spring.io/spring-data/jpa/docs/1.5.0.RELEASE/reference/html/jpa.repositories.html" rel="noopener noreferrer"&gt;https://docs.spring.io/spring-data/jpa/docs/1.5.0.RELEASE/reference/html/jpa.repositories.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub Repository :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/spring-projects/spring-data-jpa/blob/main/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/JpaRepository.java" rel="noopener noreferrer"&gt;https://github.com/spring-projects/spring-data-jpa/blob/main/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/JpaRepository.java&lt;/a&gt;&lt;/p&gt;

</description>
      <category>springboot</category>
      <category>spring</category>
      <category>jparepository</category>
      <category>jpa</category>
    </item>
    <item>
      <title>Exploring the New Features of Java 23</title>
      <dc:creator>Kailash Nirmal</dc:creator>
      <pubDate>Thu, 10 Oct 2024 11:24:27 +0000</pubDate>
      <link>https://forem.com/kailashnirmal/exploring-the-new-features-of-java-23-2fld</link>
      <guid>https://forem.com/kailashnirmal/exploring-the-new-features-of-java-23-2fld</guid>
      <description>&lt;p&gt;Dear Developers, Programming Enthusiasts, and Learners,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://openjdk.org/projects/jdk/23/" rel="noopener noreferrer"&gt;Java Development Kit (JDK) 23&lt;/a&gt; has officially been released (&lt;strong&gt;2024/09/17 General Availability&lt;/strong&gt;) marking another significant milestone in the evolution of the Java programming language. This latest update introduces a plethora of exciting features and enhancements aimed at improving developer experience, performance, and modularity.&lt;/p&gt;

&lt;p&gt;In this article, I’ll share some of the major highlights of JDK 23, which &lt;em&gt;I’ve gathered through my research&lt;/em&gt;. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;While I have not yet had the opportunity to try my hands on Java 23, I believe it's important to stay updated with these advancements&lt;br&gt;
.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Major Highlights of JDK 23 :
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Module Import Declarations (Preview)&lt;/strong&gt;&lt;br&gt;
JDK 23 introduces the ability to succinctly import all packages exported by a module, simplifying the reuse of modular libraries. This feature allows developers to avoid the clutter of multiple import statements and makes it easier for beginners to use third-party libraries without navigating complex package hierarchies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Markdown Documentation Comments&lt;/strong&gt;&lt;br&gt;
With this new feature, JavaDoc comments can now be written in Markdown, enhancing readability and ease of writing. This allows developers to combine Markdown syntax with HTML and JavaDoc tags, improving the documentation experience and extending the Compiler Tree API to facilitate tools that analyze Markdown content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Generational Z Garbage Collector (ZGC)&lt;/strong&gt;&lt;br&gt;
The default mode for the Z Garbage Collector has been switched to generational mode, which enhances Java application performance by collecting young objects more frequently. The previous non-generational mode has been deprecated, paving the way for improved garbage collection strategies in future releases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Vector API (Eighth Incubation)&lt;/strong&gt;&lt;br&gt;
The Vector API allows developers to express vector computations that compile reliably at runtime to optimal vector instructions on supported CPU architectures. It aims to provide a clear and concise API while ensuring performance on x64 and AArch64 architectures, aligning with Project Valhalla.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Stream Gatherers (Second Preview)&lt;/strong&gt;&lt;br&gt;
Stream Gatherers enhance the existing Stream API by allowing custom intermediate operations to be defined, making stream pipelines more flexible and expressive. This feature empowers developers to manipulate streams of infinite size in ways that were previously difficult.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Class-File API (Preview)&lt;/strong&gt;&lt;br&gt;
The new Class-File API provides an interface for processing class files that aligns with the Java Virtual Machine specification. This API will facilitate the migration of JDK components to a standard API, ultimately helping to remove the internal ASM library from JDK.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Support for Primitive Types in Patterns, Instanceof, and Switch&lt;/strong&gt;&lt;br&gt;
This feature enhances Java's pattern matching capabilities by allowing primitive type patterns in all contexts. It simplifies coding by making it easier to safely handle checks and casts for primitive types, thus improving the language's usability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Flexible Constructor Bodies (Second Preview)&lt;/strong&gt;&lt;br&gt;
Flexible constructor bodies allow developers to initialize fields in a class before invoking any constructor, providing greater freedom in expressing constructor behavior while maintaining the guarantee of a top-down instantiation order.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9. Implicitly Declared Classes and Instance Methods (Second Preview)&lt;/strong&gt;&lt;br&gt;
This enhancement aims to simplify the learning curve for beginners by allowing the easy creation of single-class programs. It automatically imports essential methods for console I/O and public classes from the&lt;br&gt;
&lt;code&gt;java.base&lt;/code&gt;&lt;br&gt;
module, facilitating a smoother learning experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10. Primitive Types in Patterns&lt;/strong&gt;&lt;br&gt;
This feature allows Java developers to use primitive types in pattern matching contexts, enhancing safety and flexibility in code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;11. String Templates (Dropped)&lt;/strong&gt;&lt;br&gt;
While string templates aimed to complement string literals and text blocks by embedding expressions, this feature was dropped from JDK 23 for further evaluation and potential redesign.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;12. Future Plans and Support&lt;/strong&gt;&lt;br&gt;
JDK 23 is a non-LTS release, supported for only six months, in contrast to JDK 21, which is an LTS version. Oracle has also announced ongoing plans for Java in 2024, focusing on broader improvements and extending Java's capabilities to various programming models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;u&gt;Conclusion :&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;JDK 23 is rich with features and enhancements that aim to refine the Java development experience. As I continue to explore this version, I look forward to testing these features firsthand and sharing my insights with you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Note to Readers
&lt;/h2&gt;

&lt;p&gt;I want to emphasize that the information presented in this article may not be exhaustive or perfectly accurate, as it has been collected from a variety of sources. I apologize for any inaccuracies or omissions. This article is based on my readings and understanding of JDK 23, and while I strive to provide accurate information, I encourage you to experiment and explore these features firsthand to gain deeper insights.&lt;/p&gt;

&lt;p&gt;Thank you for your understanding, and I hope you find this information helpful as you navigate the latest updates in Java!&lt;/p&gt;

&lt;p&gt;Thanks,&lt;br&gt;
Kailash&lt;br&gt;
JavaCharter&lt;/p&gt;

</description>
      <category>java</category>
      <category>jdk</category>
      <category>oracle</category>
      <category>jdk23</category>
    </item>
    <item>
      <title>Dockerizing your Java Spring Boot application with Maven, along with a PostgreSQL database</title>
      <dc:creator>Kailash Nirmal</dc:creator>
      <pubDate>Wed, 11 Sep 2024 09:10:43 +0000</pubDate>
      <link>https://forem.com/kailashnirmal/dockerizing-your-java-spring-boot-application-with-maven-along-with-a-postgresql-database-2kpl</link>
      <guid>https://forem.com/kailashnirmal/dockerizing-your-java-spring-boot-application-with-maven-along-with-a-postgresql-database-2kpl</guid>
      <description>&lt;p&gt;Dockerizing a Spring Boot application involves creating a Docker image that contains your application and its dependencies. This allows you to package your application in a way that it can be easily shared and run on any machine with Docker installed. Below are step-by-step instructions for Dockerizing your Maven-based Spring Boot application and running it in a Docker container.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Install Docker&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First, ensure that Docker is installed on your local machine. You can download it from the official Docker website. Follow the installation instructions for your operating system.&lt;/p&gt;

&lt;p&gt;If you are done with step 1 then follow the step 2 &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Create a Dockerfile&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the root directory of your Spring Boot application (where your pom.xml file is located), create a file named Dockerfile without any file extension. This file will define the Docker image.&lt;/p&gt;

&lt;p&gt;Here’s a simple example of what your Dockerfile might look like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frphlloquocqm3t7yipl8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frphlloquocqm3t7yipl8.png" alt="Image description" width="658" height="627"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note :&lt;/strong&gt; You may encounter few issues here. Try to resolve. It shouldn't be big. For example &amp;gt; &lt;strong&gt;ERROR [internal] load metadata for docker.io/library/maven:3.8.6-openjdk-17&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Build the Docker Image&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open a terminal (command prompt or shell) and navigate to the directory that contains your Dockerfile. Run the following command to build the Docker image:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker build -t your-image-name .&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Replace your-image-name with a name you want to give your Docker image.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Verify the Docker Image&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After the build completes, verify that your image was created successfully:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker images&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You should see your image listed in the output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Run the Docker Container&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now you can run your Docker container using the following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker run -p 8080:8080 your-image-name&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This command maps port 8080 of the container to port 8080 of your host machine. Replace your-image-name with the name you used when building the image.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Test Your Application&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can access your Spring Boot application by opening a web browser and navigating to &lt;code&gt;http://localhost:8080&lt;/code&gt;. If everything is set up correctly, you should see your application running.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7: Export the Docker Image&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To share the Docker image with the other team who doesn't have internet access, you can save the image as a tar file:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker save -o your-image-name.tar your-image-name&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This will create a tarball of your Docker image that can be transferred to the other team's VM.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8: Load the Docker Image on the Target Machine&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once the other team has received the your-image-name.tar file, they can load the image into their Docker environment using the following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker load -i your-image-name.tar&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 9: Run the Docker Container on the Target Machine&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After loading the image, the other team can run the container with the same command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker run -p 8080:8080 your-image-name&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 10: Access the Application&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The application should now be accessible at &lt;a href="http://localhost:8080" rel="noopener noreferrer"&gt;http://localhost:8080&lt;/a&gt; on the target machine. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Additional Notes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Database Configuration:&lt;/em&gt; If your application uses PostgreSQL, you may need to set up a PostgreSQL container or ensure that the database is accessible from the application. You can create a Docker Compose file to manage multiple containers (e.g., one for your app and one for PostgreSQL).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Environment Variables&lt;/em&gt;: If your application requires environment variables (for database configuration, etc.), you can pass them to the Docker container using the -e flag in the docker run command.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Volume Mounting&lt;/em&gt;: If the application needs to persist data or requires access to local files, consider using Docker volumes.&lt;/p&gt;

&lt;p&gt;By following these steps, you should be able to successfully Dockerize your Spring Boot application and share it with the other team.&lt;/p&gt;

&lt;p&gt;Thanks,&lt;br&gt;
Kailash&lt;br&gt;
JavaCharter&lt;/p&gt;

</description>
      <category>database</category>
      <category>docker</category>
      <category>java</category>
      <category>springboot</category>
    </item>
  </channel>
</rss>
