blob: ee7284b8c5e77c39a30d56e3348fa68ac1986fa0 [file] [log] [blame]
------
Usage
------
Jerome Lacoste
Dennis Lundberg
Olivier Lamy
Karl Heinz Marbaise
------
2016-06-03
------
~~ Licensed to the Apache Software Foundation (ASF) under one
~~ or more contributor license agreements. See the NOTICE file
~~ distributed with this work for additional information
~~ regarding copyright ownership. The ASF licenses this file
~~ to you under the Apache License, Version 2.0 (the
~~ "License"); you may not use this file except in compliance
~~ with the License. You may obtain a copy of the License at
~~
~~ http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing,
~~ software distributed under the License is distributed on an
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~ KIND, either express or implied. See the License for the
~~ specific language governing permissions and limitations
~~ under the License.
~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html
Usage
Some brief examples on how to use this plugin. If you want to use advanced
configurations you should have a look at the
{{{./index.html#Examples}Example section}}.
documentation for
{{{/shared/maven-archiver/}Maven Archiver}}.
To handle archiving this version of Maven JAR Plugin uses
{{{/shared/maven-archiver/index.html}Maven Archiver}} ${mavenArchiverVersion}.
<<Note:>> If you need to sign your JAR files you should use the
{{{/plugins/maven-jarsigner-plugin/}Maven Jarsigner Plugin}} instead.
* How to build a JAR file
When you want to create a JAR-file with Maven, you first have to create a <<<pom.xml>>>-file with at least the following content:
+----------+
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.project</groupId>
<artifactId>core</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- <packaging>jar</packaging> -->
</project>
+----------+
Since 'jar' is the default packaging type it is not required to set it in this case.
Apart from the above you will normally want some real java source files which should be located within
<<<src/main/java>>>. If you need extra resources on your classpath (for example property files)
they should be located in <<<src/main/resources>>>.
Now we can create a JAR-file by using the command below:
+-----------------+
mvn package
+-----------------+
The 'package' phase is always responsible for bundling all the files in the artifact, in this case a JAR-file.
In your project's <<<target>>> directory you'll see the generated jar file which is named like:
'core-1.0-SNAPSHOT.jar'. The resulting 'jar' file contains the compiled java class files as well as
the files from <<<src/main/resources>>>.
Usually there is no need to mentioned the 'maven-jar-plugin' explicit cause it's bound to
the {{{/guides/introduction/introduction-to-the-lifecycle.html}Maven Build Life Cycle}}.
For full documentation, click {{{./plugin-info.html}here}}.
* Modular JAR files
The {{{https://openjdk.java.net/projects/jigsaw/spec/}Java Platform Module System (JPMS)}} introduced
{{{https://cr.openjdk.java.net/~mr/jigsaw/spec/jar.html}changes in the JAR file specifications}}
as well - Modular JAR files. Modular JAR files are JAR files with <<<module-info.class>>> file in the root directory
(or in the versioned area for multi-release JAR files). If the project contains <<<module-info.class>>>
the resulting JAR will be a Modular JAR without a need for any configuration regardless of the plugin version used.
Starting with version 3.1.2, if the JAR file contains <<<module-info.class>>>, this plugin will update
the modular descriptor (<<<module-info.class>>>) with additional attributes such as the list of packages included
and will validate the resulting modular descriptor (for example if all services provided by the module are actually
included in the JAR file). The most notable additional attribute added is the module main class.
If the JAR manifest contains <<<Main-Class>>> attribute this plugin will set the module main class to the same value
(for example how to set it read {{{../../shared/maven-archiver/examples/classpath.html}Make The Jar Executable}}).
Internally the plugin uses the JDK <<<jar>>> tool so in order to add the additional attributes and to
verify the modular descriptor Maven should be run with JDK version 9 or newer. If version 8 or earlier is used
the resulting JAR still will be Modular JAR (as it contains <<<module-info.class>>>) but no additional attributes
will be added and no validation will be performed.