在spark sql支持hive时,我们在idea 上编译不会出错,在生成jar包时缺报错
] Error creating validator of type org.datanucleus.properties.CorePropertyValidator
ClassLoaderResolver for class "" gave error on creation : {1}
。。。。。
最主要的提示在这里
org.datanucleus.exceptions.NucleusUserException: Persistence process has been specified to use a ClassLoaderResolver of name "datanucleus" yet this has not been found by the DataNucleus plugin mechanism. Please check your CLASSPATH and plugin specification.
已经说明是plugin.xml文件的问题,在查看datanucleus.的三个jar包时发现确实有三个plugin.xml,把他们打开时确发现他们三个的内容完全不一样,很明显,在生成jar 包时这三个文件必不可少,而查看spark sql项目生成的jar包时只有这三个plugin.xml的一部分,意思就是说:三个plugin.xml并没合并!datanucleus并不能正常使用!
解决:必须将这三个plugin,xml手动合并,可以在这里下载https://download.csdn.net/download/qq_38426934/10616844
在生成jar包时需要用打包插件声明datanucleus这个类
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>com.test.RDDToDataset</Main-Class>
<Premain-Class>org.datanucleus.enhancer.DataNucleusClassFileTransformer</Premain-Class>
<Bundle-SymbolicName>org.datanucleus;singleton:=true</Bundle-SymbolicName>
</manifestEntries>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>reference.conf</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
</transformers>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
如果用sbt道理一样可以直接修改 MANIFEST.MF为
Manifest-Version: 1.0
Bundle-SymbolicName: org.datanucleus;singleton:=true
Premain-Class: org.datanucleus.enhancer.DataNucleusClassFileTransforme
r
Built-By: Administrator
Build-Jdk: 1.8.0_101
Main-Class: com.test.RDDToDataset
可以看出关键就是
Bundle-SymbolicName: org.datanucleus;singleton:=true
Premain-Class: org.datanucleus.enhancer.DataNucleusClassFileTransforme
r对datanucleus的声明