[MNG-6115] prevent JAnsi from writing temp native files to lib/ext

Project: http://git-wip-us.apache.org/repos/asf/maven/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/181b0215
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/181b0215
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/181b0215

Branch: refs/heads/MNG-6169
Commit: 181b0215aa1199e152db9d2c08b1a01436547805
Parents: 809ba34
Author: Hervé Boutemy <hbout...@apache.org>
Authored: Sun Mar 5 00:39:31 2017 +0100
Committer: Hervé Boutemy <hbout...@apache.org>
Committed: Sun Mar 12 12:12:16 2017 +0100

----------------------------------------------------------------------
 apache-maven/pom.xml                            | 17 ++++++
 apache-maven/src/bin/mvn                        |  1 -
 apache-maven/src/bin/mvn.cmd                    |  1 -
 apache-maven/src/lib/jansi-native/README.txt    |  7 +++
 apache-maven/src/main/assembly/component.xml    |  8 +++
 .../java/org/apache/maven/cli/MavenCli.java     | 59 ++++++++++++++++++++
 6 files changed, 91 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven/blob/181b0215/apache-maven/pom.xml
----------------------------------------------------------------------
diff --git a/apache-maven/pom.xml b/apache-maven/pom.xml
index 6fc5a73..a528ddb 100644
--- a/apache-maven/pom.xml
+++ b/apache-maven/pom.xml
@@ -130,6 +130,22 @@ under the License.
     <plugins>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <configuration>
+          <includeArtifactIds>jansi</includeArtifactIds>
+          <includes>META-INF/native/**</includes>
+        </configuration>
+        <executions>
+          <execution>
+            <id>unpack-jansi-native</id>
+            <goals>
+              <goal>unpack-dependencies</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-compiler-plugin</artifactId>
         <executions>
           <execution>
@@ -215,6 +231,7 @@ under the License.
                 <id>clean-target-dir</id>
                 <phase>prepare-package</phase>
                 <configuration>
+                  <excludeDefaultDirectories>true</excludeDefaultDirectories>
                   <filesets>
                     <fileset>
                       <directory>${distributionTargetDir}</directory>

http://git-wip-us.apache.org/repos/asf/maven/blob/181b0215/apache-maven/src/bin/mvn
----------------------------------------------------------------------
diff --git a/apache-maven/src/bin/mvn b/apache-maven/src/bin/mvn
index cfb39b0..df62f68 100755
--- a/apache-maven/src/bin/mvn
+++ b/apache-maven/src/bin/mvn
@@ -191,5 +191,4 @@ exec "$JAVACMD" \
   -classpath "${CLASSWORLDS_JAR}" \
   "-Dclassworlds.conf=${MAVEN_HOME}/bin/m2.conf" \
   "-Dmaven.home=${MAVEN_HOME}" 
"-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
-  "-Dlibrary.jansi.path=${MAVEN_HOME}/lib/ext" \
   ${CLASSWORLDS_LAUNCHER} "$@"

http://git-wip-us.apache.org/repos/asf/maven/blob/181b0215/apache-maven/src/bin/mvn.cmd
----------------------------------------------------------------------
diff --git a/apache-maven/src/bin/mvn.cmd b/apache-maven/src/bin/mvn.cmd
index c86662b..9d92279 100644
--- a/apache-maven/src/bin/mvn.cmd
+++ b/apache-maven/src/bin/mvn.cmd
@@ -178,7 +178,6 @@ set 
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
   "-Dclassworlds.conf=%MAVEN_HOME%\bin\m2.conf" ^
   "-Dmaven.home=%MAVEN_HOME%" ^
   "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
-  "-Dlibrary.jansi.path=%MAVEN_HOME%\lib\ext" ^
   %CLASSWORLDS_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
 if ERRORLEVEL 1 goto error
 goto end

http://git-wip-us.apache.org/repos/asf/maven/blob/181b0215/apache-maven/src/lib/jansi-native/README.txt
----------------------------------------------------------------------
diff --git a/apache-maven/src/lib/jansi-native/README.txt 
b/apache-maven/src/lib/jansi-native/README.txt
new file mode 100644
index 0000000..22857a6
--- /dev/null
+++ b/apache-maven/src/lib/jansi-native/README.txt
@@ -0,0 +1,7 @@
+This directory contains Jansi native libraries, extracted from Jansi jar.
+
+You can add your own extensions for platforms not natively supported by
+Jansi: the libraries follow HawtJNI directory and filename conventions.
+See 
http://fusesource.github.io/hawtjni/documentation/api/org/fusesource/hawtjni/runtime/Library.html
+
+See https://github.com/fusesource/jansi-native for native lib source.

http://git-wip-us.apache.org/repos/asf/maven/blob/181b0215/apache-maven/src/main/assembly/component.xml
----------------------------------------------------------------------
diff --git a/apache-maven/src/main/assembly/component.xml 
b/apache-maven/src/main/assembly/component.xml
index ca4dcb6..7b05af7 100644
--- a/apache-maven/src/main/assembly/component.xml
+++ b/apache-maven/src/main/assembly/component.xml
@@ -56,6 +56,14 @@ under the License.
       </includes>
     </fileSet>
     <fileSet>
+      <directory>target/dependency/META-INF/native</directory>
+      <outputDirectory>lib/jansi-native</outputDirectory>
+      <includes>
+        <include>**</include>
+      </includes>
+      <fileMode>0755</fileMode>
+    </fileSet>
+    <fileSet>
       <directory>src/bin</directory>
       <outputDirectory>bin</outputDirectory>
       <includes>

http://git-wip-us.apache.org/repos/asf/maven/blob/181b0215/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
----------------------------------------------------------------------
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java 
b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
index b3367c1..350fa61 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
@@ -185,6 +185,7 @@ public class MavenCli
     {
         MavenCli cli = new MavenCli();
 
+        prepareJansiNative();
         MessageUtils.systemInstall();
         int result = cli.doMain( new CliRequest( args, classWorld ) );
         MessageUtils.systemUninstall();
@@ -192,6 +193,64 @@ public class MavenCli
         return result;
     }
 
+    /**
+     * temporary method while improvement reported to JAnsi+HawtJNI and 
integrated:
+     * library.jansi.path should point to lib/jansi-native and HawtJNI should 
be able to detect
+     * the platform instead of forcing the user having to point 
library.jansi.path to
+     * lib/jansi-native/[platform]
+     */
+    private static void prepareJansiNative()
+    {
+        if ( System.getProperty( "library.jansi.path" ) == null )
+        {
+            String mavenHome = System.getProperty( "maven.home" );
+
+            if ( mavenHome != null )
+            {
+                File jansiNative = new File( mavenHome, "lib/jansi-native/" + 
hawtJNIgetPlatform() );
+                System.setProperty( "library.jansi.path", 
jansiNative.getAbsolutePath() );
+            }
+        }
+    }
+
+    private static String hawtJNIgetOperatingSystem()
+    {
+        String name = System.getProperty( "os.name" ).toLowerCase().trim();
+        if ( name.startsWith( "linux" ) )
+        {
+            return "linux";
+        }
+        if ( name.startsWith( "mac os x" ) )
+        {
+            return "osx";
+        }
+        if ( name.startsWith( "win" ) )
+        {
+            return "windows";
+        }
+        return name.replaceAll( "\\W+", "_" );
+
+    }
+
+    private static String hawtJNIgetPlatform()
+    {
+        return hawtJNIgetOperatingSystem() + hawtJNIgetBitModel();
+    }
+
+    private static int hawtJNIgetBitModel()
+    {
+        String prop = System.getProperty( "sun.arch.data.model" );
+        if ( prop == null )
+        {
+            prop = System.getProperty( "com.ibm.vm.bitmode" );
+        }
+        if ( prop != null )
+        {
+            return Integer.parseInt( prop );
+        }
+        return -1; // we don't know..
+    }
+
     // TODO need to externalize CliRequest
     public static int doMain( String[] args, ClassWorld classWorld )
     {

Reply via email to