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 2018/12/25 23:37:58 UTC

[maven-archiver] branch MSHARED-787 created (now 64e8b56)

This is an automated email from the ASF dual-hosted git repository.

michaelo pushed a change to branch MSHARED-787
in repository https://gitbox.apache.org/repos/asf/maven-archiver.git.


      at 64e8b56  [MSHARED-787] Add optional buildEnvironment information to the manifest

This branch includes the following new commits:

     new 64e8b56  [MSHARED-787] Add optional buildEnvironment information to the manifest

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[maven-archiver] 01/01: [MSHARED-787] Add optional buildEnvironment information to the manifest

Posted by mi...@apache.org.
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 64e8b56386e72ad976a4ebb8360c2697f9187823
Author: Michael Osipov <mi...@apache.org>
AuthorDate: Wed Dec 26 00:37:25 2018 +0100

    [MSHARED-787] Add optional buildEnvironment information to the manifest
---
 .../maven/archiver/ManifestConfiguration.java      | 25 +++++++++++++++++++++-
 .../org/apache/maven/archiver/MavenArchiver.java   | 22 +++++++++++++++----
 .../apache/maven/archiver/MavenArchiverTest.java   | 17 +++++++++++----
 3 files changed, 55 insertions(+), 9 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..0f5e92a 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.3.1
+     */
+    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 f925a39..c292a46 100644
--- a/src/main/java/org/apache/maven/archiver/MavenArchiver.java
+++ b/src/main/java/org/apache/maven/archiver/MavenArchiver.java
@@ -244,7 +244,10 @@ public class MavenArchiver
 
         // Added basic entries
         Manifest m = new Manifest();
-        addCreatedByEntry( session, m, entries );
+        if ( config.isAddBuildEnvironmentEntries() )
+        {
+            handleBuildEnvironmentEntries( session, m, entries );
+        }
 
         addCustomEntries( m, entries, config );
 
@@ -508,8 +511,6 @@ public class MavenArchiver
     private void addCustomEntries( Manifest m, Map<String, String> entries, ManifestConfiguration config )
         throws ManifestException
     {
-        addManifestAttribute( m, entries, "Build-Jdk", System.getProperty( "java.version" ) );
-
         /*
          * TODO: rethink this, it wasn't working Artifact projectArtifact = project.getArtifact(); if (
          * projectArtifact.isSnapshot() ) { Manifest.Attribute buildNumberAttr = new Manifest.Attribute( "Build-Number",
@@ -615,6 +616,9 @@ public class MavenArchiver
         Manifest manifest = getManifest( session, workingProject, archiveConfiguration );
 
         // Configure the jar
+
+        // TODO here we would need to say archiver.setMinimalDefaultManifest(true) to avoid entry "Created-By: Plexus Achiver ${version}}
+
         archiver.addConfiguredManifest( manifest );
 
         archiver.setCompress( archiveConfiguration.isCompress() );
@@ -658,7 +662,7 @@ public class MavenArchiver
     }
 
     private void addCreatedByEntry( MavenSession session, Manifest m, Map<String, String> entries )
-        throws ManifestException
+    throws ManifestException
     {
         String createdBy = "Apache Maven";
         if ( session != null ) // can be null due to API backwards compatibility
@@ -672,6 +676,16 @@ public class MavenArchiver
         addManifestAttribute( m, entries, "Created-By", createdBy );
     }
 
+    private void handleBuildEnvironmentEntries( MavenSession session, Manifest m, Map<String, String> entries )
+        throws ManifestException
+    {
+        addCreatedByEntry( session, m, entries );
+        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/test/java/org/apache/maven/archiver/MavenArchiverTest.java b/src/test/java/org/apache/maven/archiver/MavenArchiverTest.java
index f4a496b..68c1c95 100644
--- a/src/test/java/org/apache/maven/archiver/MavenArchiverTest.java
+++ b/src/test/java/org/apache/maven/archiver/MavenArchiverTest.java
@@ -482,6 +482,7 @@ public class MavenArchiverTest
         config.setForced( true );
         config.getManifest().setAddDefaultImplementationEntries( true );
         config.getManifest().setAddDefaultSpecificationEntries( true );
+        config.getManifest().setAddBuildEnvironmentEntries( true );
 
         // noinspection deprecation
         MavenSession session = getDummySessionWithoutMavenVersion();
@@ -490,6 +491,11 @@ public class MavenArchiverTest
         Attributes manifest = getJarFileManifest( jarFile ).getMainAttributes();
 
         assertEquals( "Apache Maven", manifest.get( new Attributes.Name( "Created-By" ) ) ); // no version number
+        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 ) );
@@ -498,8 +504,6 @@ public class MavenArchiverTest
         assertEquals( "archiver test", manifest.get( Attributes.Name.IMPLEMENTATION_TITLE ) );
         assertEquals( "0.1.1", manifest.get( Attributes.Name.IMPLEMENTATION_VERSION ) );
         assertEquals( "Apache", manifest.get( Attributes.Name.IMPLEMENTATION_VENDOR ) );
-
-        assertEquals( System.getProperty( "java.version" ), manifest.get( new Attributes.Name( "Build-Jdk" ) ) );
     }
 
     @Test
@@ -517,6 +521,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" );
@@ -539,6 +544,11 @@ public class MavenArchiverTest
         Attributes manifest = jarFileManifest.getMainAttributes();
 
         assertEquals( "Apache Maven 3.0.4", manifest.get( new Attributes.Name( "Created-By" ) ) );
+        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 ) );
@@ -554,8 +564,6 @@ 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.version" ), manifest.get( new Attributes.Name( "Build-Jdk" ) ) );
-
         assertTrue( StringUtils.isEmpty( manifest.getValue( new Attributes.Name( "keyWithEmptyValue" ) ) ) );
         assertTrue( manifest.containsKey( new Attributes.Name( "keyWithEmptyValue" ) ) );
 
@@ -605,6 +613,7 @@ public class MavenArchiverTest
 
         MavenArchiveConfiguration config = new MavenArchiveConfiguration();
         config.setForced( true );
+        config.getManifest().setAddBuildEnvironmentEntries( true );
 
         archiver.createArchive( session, project, config );
         assertTrue( jarFile.exists() );