{"id":1993,"date":"2017-03-24T11:56:17","date_gmt":"2017-03-24T06:26:17","guid":{"rendered":"https:\/\/www.wikitechy.com\/technology\/?p=1993"},"modified":"2017-03-28T16:40:47","modified_gmt":"2017-03-28T11:10:47","slug":"create-executable-jar-dependencies-using-maven","status":"publish","type":"post","link":"https:\/\/www.wikitechy.com\/technology\/create-executable-jar-dependencies-using-maven\/","title":{"rendered":"JAVA &#8211; How to create an executable JAR with dependencies using Maven"},"content":{"rendered":"<h4 id=\"maven\"><span style=\"color: #800000;\"><b>Maven<\/b><\/span><\/h4>\n<ul>\n<li>Mavenis a powerful project management tool that is based on POM (project object model). It is used for projects build, dependency and documentation.<\/li>\n<li>It simplifies the build process like ANT. But it is too much advanced than ANT.<\/li>\n<li>Current version of Maven is 3.<\/li>\n<\/ul>\n<h4 id=\"a-jar-java-archive\"><span style=\"color: #ff6600;\"><b>A JAR (Java <\/b><b>ARchive<\/b><b>)<\/b><\/span><\/h4>\n<ul>\n<li>JAR is a package file format typically used to aggregate many Java class files and associated metadata and resources (text, images, etc.) into one file for distribution.<\/li>\n<\/ul>\n<h4 id=\"to-create-a-jar-file-with-maven\"><span style=\"color: #000000;\"><b>TO CREATE A JAR FILE WITH MAVEN<\/b><\/span><\/h4>\n<p><span style=\"color: #000000;\"><u><b>Create a simple Java project<\/b><\/u><\/span><\/p>\n<ul>\n<li>Create a Java project from the Maven quick start template.<\/li>\n<\/ul>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">$ mvn archetype:generate -DgroupId=com.wikitechy.core.utils -DartifactId=dateUtils<br\/> -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false<\/code><\/pre> <\/div>\n[ad type=&#8221;banner&#8221;]\n<ul>\n<li>The following files and folder structure will be created.<\/li>\n<\/ul>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">css code<\/span> <\/div> <pre class=\"language-css code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-css code-embed-code\">.<br\/>|____dateUtils<br\/>| |____pom.xml<br\/>| |____src<br\/>| | |____main<br\/>| | | |____java<br\/>| | | | |____com<br\/>| | | | | |____wikitechy<br\/>| | | | | | |____core<br\/>| | | | | | | |____utils<br\/>| | | | | | | | |____App.java<br\/>| | |____test<br\/>| | | |____java<br\/>| | | | |____com<br\/>| | | | | |____wikitechy<br\/>| | | | | | |____core<br\/>| | | | | | | |____utils<br\/>| | | | | | | | |____AppTest.java<\/code><\/pre> <\/div>\n<p>Above folder structure is not enough, <b>create a log4j.properties file <\/b>and put it in <b>src<\/b><b>\/main\/resources\/log4j.properties<\/b>, just create the resources folder manually.<\/p>\n<h4 id=\"log4j-properties\"><span style=\"color: #000000;\"><b>log4j.properties<\/b><\/span><\/h4>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">java code<\/span> <\/div> <pre class=\"language-java code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-java code-embed-code\"># Root logger option<br\/>log4j.rootLogger=DEBUG, stdout<br\/><br\/># Direct log messages to stdout<br\/>log4j.appender.stdout=org.apache.log4j.ConsoleAppender<br\/>log4j.appender.stdout.layout=org.apache.log4j.PatternLayout<br\/>log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n<\/code><\/pre> <\/div>\n<h4 id=\"make-it-support-eclipse\"><span style=\"color: #000000;\"><b>Make it support Eclipse.<\/b><\/span><\/h4>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">java code<\/span> <\/div> <pre class=\"language-java code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-java code-embed-code\">$ mvn eclipse:eclipse<\/code><\/pre> <\/div>\n[ad type=&#8221;banner&#8221;]\n<h4 id=\"update-pom-xml\"><span style=\"color: #000000;\"><b>Update Pom.xml<\/b><\/span><\/h4>\n<p>Update pom.xml to declare both <b>log4j<\/b> and the <b>jodatime<\/b><b> dependencies<\/b>, for output to a jar format, make sure the packaging is set to \u201cjar\u201d.<\/p>\n<h4 id=\"pom-xml\"><span style=\"color: #0000ff;\"><b>pom.xml<\/b><\/span><\/h4>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">html code<\/span> <\/div> <pre class=\"language-markup code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-markup code-embed-code\">&lt;project xmlns=&quot;http:\/\/maven.apache.org\/POM\/4.0.0&quot;<br\/>\txmlns:xsi=&quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot;<br\/>\txsi:schemaLocation=&quot;http:\/\/maven.apache.org\/POM\/4.0.0<br\/>\thttp:\/\/maven.apache.org\/maven-v4_0_0.xsd&quot;&gt;<br\/>\t&lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;<br\/>\t&lt;groupId&gt;com.wikitechy.core.utils&lt;\/groupId&gt;<br\/>\t&lt;artifactId&gt;dateUtils&lt;\/artifactId&gt;<br\/>&lt;!-- Output to jar format --&gt;<br\/>\t&lt;packaging&gt;jar&lt;\/packaging&gt;<br\/><br\/>\t&lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;<br\/>\t&lt;name&gt;dateUtils&lt;\/name&gt;<br\/>\t&lt;url&gt;http:\/\/maven.apache.org&lt;\/url&gt;<br\/>&lt;properties&gt;<br\/>\t\t&lt;jdk.version&gt;1.7&lt;\/jdk.version&gt;<br\/>\t\t&lt;jodatime.version&gt;2.5&lt;\/jodatime.version&gt;<br\/>\t\t&lt;junit.version&gt;4.11&lt;\/junit.version&gt;<br\/>\t\t&lt;log4j.version&gt;1.2.17&lt;\/log4j.version&gt;<br\/>\t&lt;\/properties&gt;<br\/><br\/>\t&lt;dependencies&gt;<br\/>\t\t&lt;dependency&gt;<br\/>\t\t\t&lt;groupId&gt;junit&lt;\/groupId&gt;<br\/>\t\t\t&lt;artifactId&gt;junit&lt;\/artifactId&gt;<br\/>\t\t\t&lt;version&gt;${junit.version}&lt;\/version&gt;<br\/>\t\t\t&lt;scope&gt;test&lt;\/scope&gt;<br\/>\t\t&lt;\/dependency&gt;<br\/>\t\t&lt;dependency&gt;<br\/>\t\t\t&lt;groupId&gt;joda-time&lt;\/groupId&gt;<br\/>\t\t\t&lt;artifactId&gt;joda-time&lt;\/artifactId&gt;<br\/>\t\t\t&lt;version&gt;${jodatime.version}&lt;\/version&gt;<br\/>\t\t&lt;\/dependency&gt;<br\/>&lt;dependency&gt;<br\/>\t\t\t&lt;groupId&gt;log4j&lt;\/groupId&gt;<br\/>\t\t\t&lt;artifactId&gt;log4j&lt;\/artifactId&gt;<br\/>\t\t\t&lt;version&gt;${log4j.version}&lt;\/version&gt;<br\/>\t\t&lt;\/dependency&gt;<br\/>\t&lt;\/dependencies&gt;<br\/><br\/>\t&lt;build&gt;<br\/>\t\t&lt;finalName&gt;dateutils&lt;\/finalName&gt;<br\/>\t\t&lt;plugins&gt;<br\/><br\/>\t\t\t&lt;!-- download source code in Eclipse, best practice --&gt;<br\/>\t\t\t&lt;plugin&gt;<br\/>\t\t\t\t&lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;<br\/>\t\t\t\t&lt;artifactId&gt;maven-eclipse-plugin&lt;\/artifactId&gt;<br\/>\t\t\t\t&lt;version&gt;2.9&lt;\/version&gt;<br\/>\t\t\t\t&lt;configuration&gt;<br\/>\t\t\t\t\t&lt;downloadSources&gt;true&lt;\/downloadSources&gt;<br\/>\t\t\t\t\t&lt;downloadJavadocs&gt;false&lt;\/downloadJavadocs&gt;<br\/>\t\t\t\t&lt;\/configuration&gt;<br\/>\t\t\t&lt;\/plugin&gt;<br\/>&lt;!-- Set a JDK compiler level --&gt;<br\/>\t\t\t&lt;plugin&gt;<br\/>\t\t\t\t&lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;<br\/>\t\t\t\t&lt;artifactId&gt;maven-compiler-plugin&lt;\/artifactId&gt;<br\/>\t\t\t\t&lt;version&gt;2.3.2&lt;\/version&gt;<br\/>\t\t\t\t&lt;configuration&gt;<br\/>\t\t\t\t\t&lt;source&gt;${jdk.version}&lt;\/source&gt;<br\/>\t\t\t\t\t&lt;target&gt;${jdk.version}&lt;\/target&gt;<br\/>\t\t\t\t&lt;\/configuration&gt;<br\/>\t\t\t&lt;\/plugin&gt;<br\/><br\/>\t\t\t&lt;!-- Make this jar executable --&gt;<br\/>\t\t\t&lt;plugin&gt;<br\/>\t\t\t\t&lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;<br\/>\t\t\t\t&lt;artifactId&gt;maven-jar-plugin&lt;\/artifactId&gt;<br\/>\t\t\t\t&lt;configuration&gt;<br\/>&lt;!-- DO NOT include log4j.properties file in our Jar --&gt;<br\/>\t\t\t\t  &lt;excludes&gt;<br\/>\t\t\t\t\t&lt;exclude&gt;**\/log4j.properties&lt;\/exclude&gt;<br\/>\t\t\t\t  &lt;\/excludes&gt;<br\/>\t\t\t\t  &lt;archive&gt;<br\/>\t\t\t\t\t&lt;manifest&gt;<br\/>&lt;!-- Jar file entry point --&gt;<br\/>\t\t\t\t\t\t&lt;mainClass&gt;com.wikitechy.core.utils.App&lt;\/mainClass&gt;<br\/>\t\t\t\t\t&lt;\/manifest&gt;<br\/>\t\t\t\t  &lt;\/archive&gt;<br\/>\t\t\t\t&lt;\/configuration&gt;<br\/>\t\t\t&lt;\/plugin&gt;<br\/><br\/>\t\t&lt;\/plugins&gt;<br\/>\t&lt;\/build&gt;<br\/><br\/>&lt;\/project&gt;<\/code><\/pre> <\/div>\n<h4 id=\"update-app-java\"><span style=\"color: #000000;\"><b>Update App.java<\/b><\/span><\/h4>\n<h4 id=\"app-java\"><span style=\"color: #000000;\"><b>App.java<\/b><\/span><\/h4>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">java code<\/span> <\/div> <pre class=\"language-java code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-java code-embed-code\">package com.wikitechy.core.utils;<br\/><br\/>import org.apache.log4j.Logger;<br\/>import org.joda.time.LocalDate;<br\/><br\/>public class App <br\/>{<br\/><br\/>\tprivate static final Logger logger = Logger.getLogger(App.class);<br\/><br\/>\tpublic static void main(String[] args)<br\/> {<br\/>\t\tSystem.out.println(getLocalCurrentDate());<br\/>}<br\/>private static String getLocalCurrentDate() {<br\/><br\/>\t\tif (logger.isDebugEnabled()) {<br\/>\t\t\tlogger.debug(&quot;getLocalCurrentDate() is executed!&quot;);<br\/>\t\t}<br\/><br\/>\t\tLocalDate date = new LocalDate();<br\/>\t\treturn date.toString();<br\/><br\/>\t}<br\/><br\/>}<\/code><\/pre> <\/div>\n<ul>\n<li>Thus this project has two dependencies : <b>log4j <\/b>and <b>jodatime<\/b>.<\/li>\n<\/ul>\n<h4 id=\"working-with-dependencies\"><span style=\"color: #000000;\"><b>Working with Dependencies<\/b><\/span><\/h4>\n<h4 id=\"how-to-add-dependencies-in-a-jar\"><span style=\"color: #000000;\"><b>How to add dependencies in a jar<\/b><\/span><\/h4>\n<ul>\n<li>we can put both log4j.jar and jodatime.jar inside the final.jar, but our classes are unable to call other classes which is inside the unpack log4j.jar, Java jar is designed like this, unless we can create a special class loader like one-jar plugin.<\/li>\n<li>Alternatively, use maven-assembly-plugin to extract all dependency jars into raw classes, and group it together.<\/li>\n<li>Try one-jar plugin, it will create a fat-jar, which includes the entire project\u2019s dependencies into a single jar file.<b><br \/>\n<\/b><\/li>\n<\/ul>\n<h4 id=\"solution\"><span style=\"color: #000000;\"><b>Solution<\/b><\/span><\/h4>\n<ul>\n<li>Copy the entire project\u2019s dependencies to a pre-defined folder, and define the dependency class path in the jar\u2019s manifest file.<\/li>\n<li>The updated and final pom.xml, to use maven-dependency-plugin to copy all dependencies to target\/dependency-jars\/ folder, and use maven-jar-plugin to add the dependency class path.<\/li>\n<\/ul>\n<h4 id=\"pom-xml-2\"><span style=\"color: #000000;\"><b>pom.xml<\/b><\/span><\/h4>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">html code<\/span> <\/div> <pre class=\"language-markup code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-markup code-embed-code\">&lt;project xmlns=&quot;http:\/\/maven.apache.org\/POM\/4.0.0&quot;<br\/>\txmlns:xsi=&quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot;<br\/>\txsi:schemaLocation=&quot;http:\/\/maven.apache.org\/POM\/4.0.0<br\/>\thttp:\/\/maven.apache.org\/maven-v4_0_0.xsd&quot;&gt;<br\/>\t&lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;<br\/>\t&lt;groupId&gt;com.wikitechy.core.utils&lt;\/groupId&gt;<br\/>\t&lt;artifactId&gt;dateUtils&lt;\/artifactId&gt;<br\/>\t&lt;packaging&gt;jar&lt;\/packaging&gt;<br\/>\t&lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;<br\/>\t&lt;name&gt;dateUtils&lt;\/name&gt;<br\/>\t&lt;url&gt;http:\/\/maven.apache.org&lt;\/url&gt;<br\/>&lt;properties&gt;<br\/>\t\t&lt;jdk.version&gt;1.7&lt;\/jdk.version&gt;<br\/>\t\t&lt;jodatime.version&gt;2.5&lt;\/jodatime.version&gt;<br\/>\t\t&lt;junit.version&gt;4.11&lt;\/junit.version&gt;<br\/>\t\t&lt;log4j.version&gt;1.2.17&lt;\/log4j.version&gt;<br\/>\t\t&lt;\/properties&gt;<br\/>&lt;dependencies&gt;<br\/>\t\t&lt;dependency&gt;<br\/>\t\t\t&lt;groupId&gt;junit&lt;\/groupId&gt;<br\/>\t\t\t&lt;artifactId&gt;junit&lt;\/artifactId&gt;<br\/>\t\t\t&lt;version&gt;${junit.version}&lt;\/version&gt;<br\/>\t\t\t&lt;scope&gt;test&lt;\/scope&gt;<br\/>\t\t&lt;\/dependency&gt;<br\/>\t\t&lt;dependency&gt;<br\/>\t\t\t&lt;groupId&gt;joda-time&lt;\/groupId&gt;<br\/>\t\t\t&lt;artifactId&gt;joda-time&lt;\/artifactId&gt;<br\/>\t\t\t&lt;version&gt;${jodatime.version}&lt;\/version&gt;<br\/>\t\t&lt;\/dependency&gt;<br\/>&lt;dependency&gt;<br\/>\t\t\t&lt;groupId&gt;log4j&lt;\/groupId&gt;<br\/>\t\t\t&lt;artifactId&gt;log4j&lt;\/artifactId&gt;<br\/>\t\t\t&lt;version&gt;${log4j.version}&lt;\/version&gt;<br\/>\t\t&lt;\/dependency&gt;<br\/>\t&lt;\/dependencies&gt;<br\/><br\/>\t&lt;build&gt;<br\/>\t\t&lt;finalName&gt;dateutils&lt;\/finalName&gt;<br\/>\t\t&lt;plugins&gt;<br\/><br\/>\t\t\t&lt;!-- download source code in Eclipse, best practice --&gt;<br\/>\t\t\t&lt;plugin&gt;<br\/>\t\t\t\t&lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;<br\/>\t\t\t\t&lt;artifactId&gt;maven-eclipse-plugin&lt;\/artifactId&gt;<br\/>\t\t\t\t&lt;version&gt;2.9&lt;\/version&gt;<br\/>\t\t\t\t&lt;configuration&gt;<br\/>\t\t\t\t\t&lt;downloadSources&gt;true&lt;\/downloadSources&gt;<br\/>\t\t\t\t\t&lt;downloadJavadocs&gt;false&lt;\/downloadJavadocs&gt;<br\/>\t\t\t\t&lt;\/configuration&gt;<br\/>\t\t\t&lt;\/plugin&gt;<br\/>&lt;dependency&gt;<br\/>\t\t\t&lt;groupId&gt;log4j&lt;\/groupId&gt;<br\/>\t\t\t&lt;artifactId&gt;log4j&lt;\/artifactId&gt;<br\/>\t\t\t&lt;version&gt;${log4j.version}&lt;\/version&gt;<br\/>\t\t&lt;\/dependency&gt;<br\/>\t&lt;\/dependencies&gt;<br\/><br\/>\t&lt;build&gt;<br\/>\t\t&lt;finalName&gt;dateutils&lt;\/finalName&gt;<br\/>\t\t&lt;plugins&gt;<br\/><br\/>\t\t\t&lt;!-- download source code in Eclipse, best practice --&gt;<br\/>\t\t\t&lt;plugin&gt;<br\/>\t\t\t\t&lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;<br\/>\t\t\t\t&lt;artifactId&gt;maven-eclipse-plugin&lt;\/artifactId&gt;<br\/>\t\t\t\t&lt;version&gt;2.9&lt;\/version&gt;<br\/>\t\t\t\t&lt;configuration&gt;<br\/>\t\t\t\t\t&lt;downloadSources&gt;true&lt;\/downloadSources&gt;<br\/>\t\t\t\t\t&lt;downloadJavadocs&gt;false&lt;\/downloadJavadocs&gt;<br\/>\t\t\t\t&lt;\/configuration&gt;<br\/>\t\t\t&lt;\/plugin&gt;<br\/>&lt;!-- Set a compiler level --&gt;<br\/>\t\t\t&lt;plugin&gt;<br\/>\t\t\t\t&lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;<br\/>\t\t\t\t&lt;artifactId&gt;maven-compiler-plugin&lt;\/artifactId&gt;<br\/>\t\t\t\t&lt;version&gt;2.3.2&lt;\/version&gt;<br\/>\t\t\t\t&lt;configuration&gt;<br\/>\t\t\t\t\t&lt;source&gt;${jdk.version}&lt;\/source&gt;<br\/>\t\t\t\t\t&lt;target&gt;${jdk.version}&lt;\/target&gt;<br\/>\t\t\t\t&lt;\/configuration&gt;<br\/>\t\t\t&lt;\/plugin&gt;<br\/>&lt;!-- Make this jar executable --&gt;<br\/>\t\t\t&lt;plugin&gt;<br\/>\t\t\t\t&lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;<br\/>\t\t\t\t&lt;artifactId&gt;maven-jar-plugin&lt;\/artifactId&gt;<br\/>\t\t\t\t&lt;configuration&gt;<br\/>\t\t\t\t  &lt;excludes&gt;<br\/>\t\t\t\t\t&lt;exclude&gt;**\/log4j.properties&lt;\/exclude&gt;<br\/>\t\t\t\t  &lt;\/excludes&gt;<br\/>&lt;archive&gt;<br\/>&lt;manifest&gt;<br\/>&lt;addClasspath&gt;true&lt;\/addClasspath&gt;<br\/>&lt;mainClass&gt;com.wikitechy.core.utils.App&lt;\/mainClass&gt;<br\/>&lt;classpathPrefix&gt;dependency-jars\/&lt;\/classpathPrefix&gt;<br\/>&lt;\/manifest&gt;<br\/>&lt;\/archive&gt;<br\/>&lt;\/configuration&gt;<br\/>&lt;\/plugin&gt;<br\/><br\/>&lt;!-- Copy project dependency --&gt;<br\/>\t\t\t&lt;plugin&gt;<br\/>\t\t\t\t&lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;<br\/>\t\t\t\t&lt;artifactId&gt;maven-dependency-plugin&lt;\/artifactId&gt;<br\/>\t\t\t\t&lt;version&gt;2.5.1&lt;\/version&gt;<br\/>\t\t\t\t&lt;executions&gt;<br\/>\t\t\t\t &lt;execution&gt;<br\/>&lt;id&gt;copy-dependencies&lt;\/id&gt;<br\/>\t\t\t\t\t&lt;phase&gt;package&lt;\/phase&gt;<br\/>\t\t\t\t\t&lt;goals&gt;<br\/>\t\t\t\t\t\t&lt;goal&gt;copy-dependencies&lt;\/goal&gt;<br\/>\t\t\t\t\t&lt;\/goals&gt;<br\/>\t\t\t\t\t&lt;configuration&gt;<br\/> &lt;!-- exclude junit, we need runtime dependency only --&gt;<br\/>\t\t\t&lt;includeScope&gt;runtime&lt;\/includeScope&gt;<br\/>\t\t\t&lt;outputDirectory&gt;${project.build.directory}\/dependency-jars\/&lt;\/outputDirectory&gt;<br\/>\t\t\t\t\t&lt;\/configuration&gt;<br\/>\t\t\t\t  &lt;\/execution&gt;<br\/>\t\t\t\t&lt;\/executions&gt;<br\/>\t\t\t&lt;\/plugin&gt;<br\/><br\/>\t\t&lt;\/plugins&gt;<br\/>\t&lt;\/build&gt;<br\/><br\/>&lt;\/project&gt;<\/code><\/pre> <\/div>\n[ad type=&#8221;banner&#8221;]\n<h4 id=\"final-jar-file\"><span style=\"color: #000000;\"><b>final Jar file<\/b><\/span><\/h4>\n<h4 id=\"package\"><span style=\"color: #000000;\"><b>Package<\/b><\/span><\/h4>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">$ mvn package<\/code><\/pre> <\/div>\n<ul>\n<li>Review the folder structure in the target folder<\/li>\n<\/ul>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"wp-image-2000 size-full aligncenter\" src=\"https:\/\/www.wikitechy.com\/technology\/wp-content\/uploads\/2017\/03\/Pictureo.png\" alt=\"\" width=\"749\" height=\"304\" \/><\/p>\n<p>A dateutils.jar is created, and the entire project runtime dependencies (excluded junit) are copied to target\/dependency-jars\/ folder.<\/p>\n<h4 id=\"list-out-the-dateutils-jar-content\"><span style=\"color: #000000;\"><b>List out the dateutils.jar content :<\/b><\/span><\/h4>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">$ jar tf target\/dateutils.jar<br\/>META-INF\/<br\/>META-INF\/MANIFEST.MF<br\/>com\/<br\/>com\/wikitechy\/<br\/>com\/wikitechy\/core\/<br\/>com\/wikitechy\/core\/utils\/<br\/>com\/wikitechy\/core\/utils\/App.class<br\/>META-INF\/maven\/<br\/>META-INF\/maven\/com.wikitechy.core.utils\/<br\/>META-INF\/maven\/com.wikitechy.core.utils\/dateUtils\/<br\/>META-INF\/maven\/com.wikitechy.core.utils\/dateUtils\/pom.xml<br\/>META-INF\/maven\/com.wikitechy.core.utils\/dateUtils\/pom.properties<\/code><\/pre> <\/div>\n<p><b>Extracts and review the content of MANIFEST.MF, the dependencies are added in the Class-Path.<\/b><\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">META_INF\/MANIFEST.MF<br\/>Manifest-Version: 1.0<br\/>Built-By: wikitechy<br\/>Build-Jdk: 1.7.0_05<br\/>Class-Path: dependency-jars\/joda-time-2.5.jar dependency-jars\/log4j-1.2.17.jar<br\/>Created-By: Apache Maven 3.1.1<br\/>Main-Class: com.wikitechy.core.utils.App<br\/>Archiver-Version: Plexus Archiver<\/code><\/pre> <\/div>\n[ad type=&#8221;banner&#8221;]\n<h4 id=\"run-it\"><span style=\"color: #000000;\"><b>Run it<\/b><\/span><\/h4>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">$ java -jar target\/dateutils.jar<br\/><br\/>log4j:WARN No appenders could be found for logger (com.wikitechy.core.utils.App).<br\/>log4j:WARN Please initialize the log4j system properly.<br\/>log4j:WARN See http:\/\/logging.apache.org\/log4j\/1.2\/faq.html#noconfig for more info.<br\/>2014-10-19<\/code><\/pre> <\/div>\n<h4 id=\"where-is-log4j-properties\"><span style=\"color: #000000;\"><b>Where is log4j.properties?<\/b><\/span><\/h4>\n<p>To exclude the log4j.properties in the jar file, to avoid issues like multiple log4j.properties files in classpath.<\/p>\n<p>We can still pass in the log4j properties via the log4j.configuration system property like this :<\/p>\n<div class=\"code-embed-wrapper\"> <div class=\"code-embed-infos\"> <span class=\"code-embed-name\">javascript code<\/span> <\/div> <pre class=\"language-javascript code-embed-pre line-numbers\"  data-start=\"1\" data-line-offset=\"0\"><code class=\"language-javascript code-embed-code\">$ java -jar -Dlog4j.configuration=file:\/full_path\/log4j.properties target\/dateutils.jar<br\/><br\/>17:09:15,385 DEBUG App:18 - getLocalCurrentDate() is executed!<\/code><\/pre> <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Maven Mavenis a powerful project management tool that is based on POM (project object model). It is used for projects build, dependency and documentation. It simplifies the build process like ANT. But it is too much advanced than ANT. Current version of Maven is 3. A JAR (Java ARchive) JAR is a package file format [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26,24,275],"tags":[4251,4246,4253,4254,4249,4248,4242,4238,4240,4241,4244,4243,4239,4252,4245,4250,4247,2177],"class_list":["post-1993","post","type-post","status-publish","format-standard","hentry","category-css","category-html","category-javascript","tag-building-a-runnable-jar-with-maven-2","tag-can-i-add-jars-to-maven-2-build-classpath-without-installing-them","tag-how-can-i-create-an-executable-jar-without-dependencies-using-maven","tag-how-can-i-create-an-executable-jar-without-including-3pp-dependencies-using-maven","tag-including-dependencies-in-a-jar-with-maven","tag-java-how-do-i-build-standalone-distributions-of-maven-based-projects","tag-maven-assembly-plugin-include-dependency-jars","tag-maven-build-jar-with-dependencies-command-line","tag-maven-create-executable-jar-with-external-dependencies","tag-maven-jar-with-dependencies-example","tag-maven-maven-assembly-plugin","tag-maven-shade-plugin-executable-jar-with-dependencies","tag-maven-jar-plugin-include-dependencies","tag-maven-add-a-dependency-to-a-jar-by-relative-path","tag-onejar-maven-plugin","tag-problem-building-executable-jar-with-maven","tag-why-does-maven-have-such-a-bad-rep","tag-why-is-it-faster-to-process-a-sorted-array-than-an-unsorted-array"],"_links":{"self":[{"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/posts\/1993","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/comments?post=1993"}],"version-history":[{"count":0,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/posts\/1993\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/media?parent=1993"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/categories?post=1993"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wikitechy.com\/technology\/wp-json\/wp\/v2\/tags?post=1993"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}