You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2019/01/27 21:44:52 UTC
[maven-archiver] 01/01: [MSHARED-787] Add optional buildEnvironment
information to the manifest
This is an automated email from the ASF dual-hosted git repository.
michaelo pushed a commit to branch MSHARED-787
in repository https://gitbox.apache.org/repos/asf/maven-archiver.git
commit 21ddcafafe2d9a9f3cb4fb78836593f1414f4bd7
Author: Michael Osipov <mi...@apache.org>
AuthorDate: Sun Jan 27 19:27:55 2019 +0100
[MSHARED-787] Add optional buildEnvironment information to the manifest
---
.../maven/archiver/ManifestConfiguration.java | 25 +++++++++++++++++++++-
.../org/apache/maven/archiver/MavenArchiver.java | 19 ++++++++++++++++
src/site/apt/examples/manifest.apt | 4 ++--
src/site/xdoc/index.xml.vm | 20 +++++++++++++----
.../apache/maven/archiver/MavenArchiverTest.java | 13 ++++++++++-
5 files changed, 73 insertions(+), 8 deletions(-)
diff --git a/src/main/java/org/apache/maven/archiver/ManifestConfiguration.java b/src/main/java/org/apache/maven/archiver/ManifestConfiguration.java
index 7795c48..51078d1 100644
--- a/src/main/java/org/apache/maven/archiver/ManifestConfiguration.java
+++ b/src/main/java/org/apache/maven/archiver/ManifestConfiguration.java
@@ -57,6 +57,13 @@ public class ManifestConfiguration
private String classpathPrefix = "";
/**
+ * Add build environment information about Maven, JDK, and OS.
+ *
+ * @since 3.4.0
+ */
+ private boolean addBuildEnvironmentEntries;
+
+ /**
* Add default implementation entries if this is an extension specification.
*
* @since 2.1
@@ -101,6 +108,14 @@ public class ManifestConfiguration
}
/**
+ * @return {@link #addBuildEnvironmentEntries}
+ */
+ public boolean isAddBuildEnvironmentEntries()
+ {
+ return addBuildEnvironmentEntries;
+ }
+
+ /**
* @return {@link #addDefaultImplementationEntries}
*/
public boolean isAddDefaultImplementationEntries()
@@ -133,6 +148,14 @@ public class ManifestConfiguration
}
/**
+ * @param addBuildEnvironmentEntries add build environment information true/false.
+ */
+ public void setAddBuildEnvironmentEntries( boolean addBuildEnvironmentEntries )
+ {
+ this.addBuildEnvironmentEntries = addBuildEnvironmentEntries;
+ }
+
+ /**
* @param addDefaultImplementationEntries true to add default implementations false otherwise.
*/
public void setAddDefaultImplementationEntries( boolean addDefaultImplementationEntries )
@@ -250,7 +273,7 @@ public class ManifestConfiguration
* </ol>
* <br>
* <b>NOTE:</b> If you specify a layout type of 'custom' you MUST set this layout expression.
- * You can take a look at
+ * You can take a look at
* <ol>
* <li>{@link MavenArchiver#SIMPLE_LAYOUT}</li>
* <li>{@link MavenArchiver#SIMPLE_LAYOUT_NONUNIQUE}</li>
diff --git a/src/main/java/org/apache/maven/archiver/MavenArchiver.java b/src/main/java/org/apache/maven/archiver/MavenArchiver.java
index 329b45e..55deab3 100644
--- a/src/main/java/org/apache/maven/archiver/MavenArchiver.java
+++ b/src/main/java/org/apache/maven/archiver/MavenArchiver.java
@@ -248,6 +248,11 @@ public class MavenArchiver
addCustomEntries( m, entries, config );
+ if ( config.isAddBuildEnvironmentEntries() )
+ {
+ handleBuildEnvironmentEntries( session, m, entries );
+ }
+
if ( config.isAddClasspath() )
{
StringBuilder classpath = new StringBuilder();
@@ -615,6 +620,9 @@ public class MavenArchiver
Manifest manifest = getManifest( session, workingProject, archiveConfiguration );
// Configure the jar
+
+ archiver.setMinimalDefaultManifest( true );
+
archiver.addConfiguredManifest( manifest );
archiver.setCompress( archiveConfiguration.isCompress() );
@@ -672,6 +680,17 @@ public class MavenArchiver
addManifestAttribute( m, entries, "Created-By", createdBy );
}
+ private void handleBuildEnvironmentEntries( MavenSession session, Manifest m, Map<String, String> entries )
+ throws ManifestException
+ {
+ addManifestAttribute( m, entries, "Build-Tool",
+ session != null ? session.getSystemProperties().getProperty( "maven.build.version" ) : "Apache Maven" );
+ addManifestAttribute( m, entries, "Build-Jdk", String.format( "%s (%s)", System.getProperty( "java.version" ),
+ System.getProperty( "java.vm.vendor" ) ) );
+ addManifestAttribute( m, entries, "Build-Os", String.format( "%s (%s; %s)", System.getProperty( "os.name" ),
+ System.getProperty( "os.version" ), System.getProperty( "os.arch" ) ) );
+ }
+
private Artifact findArtifactWithFile( Set<Artifact> artifacts, File file )
{
for ( Artifact artifact : artifacts )
diff --git a/src/site/apt/examples/manifest.apt b/src/site/apt/examples/manifest.apt
index 0f0c108..ef2f1cd 100644
--- a/src/site/apt/examples/manifest.apt
+++ b/src/site/apt/examples/manifest.apt
@@ -36,8 +36,8 @@ Created-By: Apache Maven ${maven.version}
Build-Jdk: ${java.version}
+-----+
-<<Note:>> The <<<Build-Jdk>>> does not take toolchains configuration into account. It is the same
-JDK version as running the Maven instance.
+ <<Note:>> The <<<Build-Jdk>>> does not take toolchains configuration into account. It is the same
+ JDK version as running the Maven instance.
* Adding Implementation And Specification Details
diff --git a/src/site/xdoc/index.xml.vm b/src/site/xdoc/index.xml.vm
index 0bc7ff3..b06db8d 100644
--- a/src/site/xdoc/index.xml.vm
+++ b/src/site/xdoc/index.xml.vm
@@ -41,6 +41,7 @@
<index/>
<<a href="#class_manifest">manifest</a>>
<addClasspath/>
+ <addBuildEnvironmentEntries/>
<addDefaultImplementationEntries/>
<addDefaultSpecificationEntries/>
<addExtensions/>
@@ -191,14 +192,26 @@
<td></td>
</tr>
<tr>
+ <td>addBuildEnvironmentEntries</td>
+ <td>
+ If the manifest will contain these entries:
+ <source>
+Build-Tool: ${maven.build.version}
+Build-Jdk: ${java.version} (${java.vendor})
+Build-Os: ${os.name} (${os.version}; (${os.arch})</source>
+ The default value is <code>false</code>.
+ </td>
+ <td>boolean</td>
+ <td>3.4.0</td>
+ </tr>
+ <tr>
<td>addDefaultImplementationEntries</td>
<td>
If the manifest will contain these entries:
<source>
Implementation-Title: \${project.name}
Implementation-Version: \${project.version}
-Implementation-Vendor: \${project.organization.name}
- </source>
+Implementation-Vendor: \${project.organization.name}</source>
The default value is <code>false</code>.
</td>
<td>boolean</td>
@@ -211,8 +224,7 @@ Implementation-Vendor: \${project.organization.name}
<source>
Specification-Title: \${project.name}
Specification-Version: \${project.artifact.selectedVersion.majorVersion}.\${project.artifact.selectedVersion.minorVersion}
-Specification-Vendor: \${project.organization.name}
- </source>
+Specification-Vendor: \${project.organization.name}</source>
The default value is <code>false</code>.
</td>
<td>boolean</td>
diff --git a/src/test/java/org/apache/maven/archiver/MavenArchiverTest.java b/src/test/java/org/apache/maven/archiver/MavenArchiverTest.java
index 7bc6a58..0b01a28 100644
--- a/src/test/java/org/apache/maven/archiver/MavenArchiverTest.java
+++ b/src/test/java/org/apache/maven/archiver/MavenArchiverTest.java
@@ -518,6 +518,7 @@ public class MavenArchiverTest
config.setForced( true );
config.getManifest().setAddDefaultImplementationEntries( true );
config.getManifest().setAddDefaultSpecificationEntries( true );
+ config.getManifest().setAddBuildEnvironmentEntries( true );
Map<String, String> manifestEntries = new HashMap<String, String>();
manifestEntries.put( "foo", "bar" );
@@ -541,6 +542,14 @@ public class MavenArchiverTest
assertEquals( "Apache Maven 3.0.4", manifest.get( new Attributes.Name( "Created-By" ) ) );
+ assertEquals( session.getSystemProperties().get( "maven.build.version" ),
+ manifest.get( new Attributes.Name( "Build-Tool" ) ) );
+ assertEquals( String.format( "%s (%s)", System.getProperty( "java.version" ),
+ System.getProperty( "java.vm.vendor" )), manifest.get( new Attributes.Name( "Build-Jdk" ) ) );
+ assertEquals( String.format( "%s (%s; %s)", System.getProperty( "os.name" ),
+ System.getProperty( "os.version" ), System.getProperty( "os.arch" )),
+ manifest.get( new Attributes.Name( "Build-Os" ) ) );
+
assertEquals( "archiver test", manifest.get( Attributes.Name.SPECIFICATION_TITLE ) );
assertEquals( "0.1", manifest.get( Attributes.Name.SPECIFICATION_VERSION ) );
assertEquals( "Apache", manifest.get( Attributes.Name.SPECIFICATION_VENDOR ) );
@@ -555,7 +564,7 @@ public class MavenArchiverTest
assertEquals( "olivier", manifest.get( new Attributes.Name( "first-name" ) ) );
assertEquals( "org.apache.maven.archiver", manifest.getValue( "Automatic-Module-Name" ) );
- assertEquals( System.getProperty( "java.specification.version" ),
+ assertNotEquals( System.getProperty( "java.specification.version" ),
manifest.get( new Attributes.Name( "Build-Jdk" ) ) );
assertTrue( StringUtils.isEmpty( manifest.getValue( new Attributes.Name( "keyWithEmptyValue" ) ) ) );
@@ -1410,6 +1419,8 @@ public class MavenArchiverTest
{
Properties systemProperties = new Properties();
systemProperties.put( "maven.version", "3.0.4" );
+ systemProperties.put( "maven.build.version",
+ "Apache Maven 3.0.4 (3ad2b6794a8293a8ca6c1590708fb5d3fc795c49; 2012-01-17T08:39:41Z)" );
return getDummySession( systemProperties );
}