[OPENJPA-2923] replace new Long(long) with Long.valueOf(long) while enhancing (#117)

diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java b/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java
index 65c5609..6fd062d 100644
--- a/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java
+++ b/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java
@@ -56,6 +56,7 @@
 import java.util.Set;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.openjpa.conf.OpenJPAConfiguration;
 import org.apache.openjpa.conf.OpenJPAConfigurationImpl;
@@ -149,6 +150,10 @@
 
     private static final AuxiliaryEnhancer[] _auxEnhancers;
 
+    private static final Method LONG_VALUE_OF = Stream.of(Long.class.getDeclaredMethods())
+            .filter(m -> "valueOf".equals(m.getName()) && long.class == m.getParameterTypes()[0])
+            .findAny().get();
+
     static {
         Class[] classes = Services.getImplementorClasses(
                 AuxiliaryEnhancer.class,
@@ -2834,7 +2839,7 @@
                     instructions.add(new VarInsnNode(Opcodes.ALOAD, 0)); // this
                 }
 
-                if (unwrapped != type) {
+                if (unwrapped != type && type != Long.class) {
                     instructions.add(new TypeInsnNode(Opcodes.NEW, Type.getInternalName(type)));
                     instructions.add(new InsnNode(Opcodes.DUP));
                 }
@@ -2865,10 +2870,17 @@
                                                             "getId",
                                                             Type.getMethodDescriptor(Type.getType(unwrapped))));
                         if (unwrapped != type) {
-                            instructions.add(new MethodInsnNode(Opcodes.INVOKESPECIAL,
-                                                                Type.getInternalName(type),
-                                                                "<init>",
-                                                                Type.getMethodDescriptor(Type.VOID_TYPE, Type.getType(unwrapped))));
+                            if (type == Long.class) {
+                                instructions.add(new MethodInsnNode(Opcodes.INVOKESTATIC,
+                                                                    Type.getInternalName(type),
+                                                                    LONG_VALUE_OF.getName(),
+                                                                    Type.getMethodDescriptor(LONG_VALUE_OF)));
+                            } else {
+                                instructions.add(new MethodInsnNode(Opcodes.INVOKESPECIAL,
+                                                                    Type.getInternalName(type),
+                                                                    "<init>",
+                                                                    Type.getMethodDescriptor(Type.VOID_TYPE, Type.getType(unwrapped))));
+                            }
                         }
                     }
                 }
diff --git a/openjpa-tools/openjpa-maven-plugin/pom.xml b/openjpa-tools/openjpa-maven-plugin/pom.xml
index 6d6081d..db5cb38 100644
--- a/openjpa-tools/openjpa-maven-plugin/pom.xml
+++ b/openjpa-tools/openjpa-maven-plugin/pom.xml
@@ -75,11 +75,13 @@
             <groupId>org.apache.maven</groupId>
             <artifactId>maven-plugin-api</artifactId>
             <version>${min.maven.version}</version>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.maven</groupId>
             <artifactId>maven-compat</artifactId>
             <version>${min.maven.version}</version>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.maven.plugin-tools</groupId>