使用idea 构建hive的自定义函数,无法打包成jar包的问题解决

在昨天 晚上 遇到了用idea 打包自己的自定义函数成jar,怎么都不行,翻查了很多博客,发现CSDN上很多博客都存在问题,而且还搜到很多博客错的一样,但是博主名字 不一样的情况,差点把我心态搞崩。

这是当时遇到的问题,还有一个问题是 在hive里面根据这个jar包创建函数的时候,还会报 你自己写的主类找不到的问题。

经过很多测试,我自己终于解决了这个问题。

下面是我的解决办法,注:错误是千奇百怪的,也许我的解决办法并不能解决你的问题。

首先 这是我 自定义 函数 是使用了maven,下面是我的pom.xml 文件

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>hive</groupId>
  <artifactId>hiveUdf</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>hiveUdf</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>

    <hadoop.version>2.5.0</hadoop.version>
    <hive.version>0.13.1</hive.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <!-- hadoop client -->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>${hadoop.version}</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
    </dependency>

    <!-- hive client -->
    <dependency>
      <groupId>org.apache.hive</groupId>
      <artifactId>hive-jdbc</artifactId>
      <version>${hive.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.hive</groupId>
      <artifactId>hive-exec</artifactId>
      <version>${hive.version}</version>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>

        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.7.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>

      </plugins>
    </pluginManagement>
  </build>
</project>

然后,我们在main文件夹下,建一个resources 资源文件夹。你自己建的时候,这个文件夹肯定是空的。

然后我们按下图步骤点开

同样,我们按照以下步骤。

 

点击下图所示

 

注意,我们自定义的hive的函数 是没有 main方法的,我自己自定义的 hive函数是这样的

接着上面的步骤,没有main方法,这块红色区域,搜不到我们写的类

 

所以我们点击右边的选项卡。

 

在我们点击ok 的时候会报错。因为我们的自定义hive函数没有main方法,所以报错。但是是并不影响,这里报错是没关系的。

我们在点击下弹出的错误提示框的 ok,再点击取消。回到刚才的地方,发现 虽然报错,不过 还是把我们自定义的类加载进来了。

 

然后依次按我下图所示。

选择我们之前创建的resources 文件夹

此时我们就会发现,在resources 文件夹下 ,多了些东西。

 然后,按下图

点击build,后就idea就开始自动为我们创建jar包了。

然后我们在out 文件夹下就能找到。

 

既然jar包 打好了,就能把它导入你的hive里面了。

猜你喜欢

转载自blog.csdn.net/qq_37889257/article/details/85060478