NutzCN Logo
问答 com.google.zxing 直接报错是什么问题?
发布于 2012天前 作者 Aleen 4801 次浏览 复制 上一个帖子 下一个帖子
标签: nutzwk

Pom文件如下:


org.nutz
nutzboot-starter-nutz-dao
provided


com.google.zxing
core
3.2.1


com.google.zxing
javase
3.3.3


错误日志如下:

[ERROR] 14:19:42.297 [main] org.nutz.boot.NbApp - something happen!!
org.nutz.ioc.IocException: IocBean[dubboManager -> dubboAnnotationBean] throw Exception when creating
	at org.nutz.ioc.impl.ObjectMakerImpl.make(ObjectMakerImpl.java:153)
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:241)
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:271)
	at org.nutz.integration.dubbo.DubboManager.init(DubboManager.java:31)
	at org.nutz.integration.dubbo.DubboManager._init(DubboManager.java:24)
	at org.nutz.integration.dubbo.DubboManager$FM$_init$cff301be46c87e2fbea60f4ef344bacb.invoke(DubboManager.java)
	at org.nutz.ioc.impl.ObjectMakerImpl$2.trigger(ObjectMakerImpl.java:181)
	at org.nutz.ioc.weaver.DefaultWeaver.onCreate(DefaultWeaver.java:89)
	at org.nutz.ioc.impl.ObjectMakerImpl.make(ObjectMakerImpl.java:141)
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:241)
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:271)
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:161)
	at org.nutz.boot.starter.dubbo.DubboStarter.start(DubboStarter.java:17)
	at org.nutz.boot.AppContext.startServers(AppContext.java:310)
	at org.nutz.boot.NbApp.execute(NbApp.java:210)
	at org.nutz.boot.NbApp.run(NbApp.java:182)
	at com.cnvp.app.sys.DubboRpcSysMainLauncher.main(DubboRpcSysMainLauncher.java:44)
Caused by: java.lang.NoClassDefFoundError: com/google/zxing/NotFoundException
	at java.lang.Class.getDeclaredFields0(Native Method)
	at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
	at java.lang.Class.getDeclaredFields(Class.java:1916)
	at org.nutz.integration.dubbo.AnnotationBean._init(AnnotationBean.java:46)
	at org.nutz.integration.dubbo.AnnotationBean$FM$_init$cff301be46c87e2fbea60f4ef344bacb.invoke(AnnotationBean.java)
	at org.nutz.ioc.impl.ObjectMakerImpl$2.trigger(ObjectMakerImpl.java:181)
	at org.nutz.ioc.weaver.DefaultWeaver.onCreate(DefaultWeaver.java:89)
	at org.nutz.ioc.impl.ObjectMakerImpl.make(ObjectMakerImpl.java:141)
	... 16 common frames omitted
Caused by: java.lang.ClassNotFoundException: com.google.zxing.NotFoundException
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 24 common frames omitted
[INFO ] 14:19:42.306 [main] org.nutz.ioc.impl.NutIoc - org.nutz.ioc.impl.NutIoc@1052195003 is closing. startup date [19-06-20 14:19:41.229]

我只是建了一个生成二维码的类而已,什么事情都没有干,为什么就直接报错了呢?

11 回复

java.lang.ClassNotFoundException 这种异常不认识? 缺jar缺依赖啊

package cn.nutz.utils;

import com.google.zxing.*;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

import javax.imageio.ImageIO;
import javax.swing.filechooser.FileSystemView;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

public class QRCodeUtil {
/**
* CODE_WIDTH:二维码宽度,单位像素
* CODE_HEIGHT:二维码高度,单位像素
* FRONT_COLOR:二维码前景色,0x000000 表示黑色
* BACKGROUND_COLOR:二维码背景色,0xFFFFFF 表示白色
* 演示用 16 进制表示,和前端页面 CSS 的取色是一样的,注意前后景颜色应该对比明显,如常见的黑白
*/
private static final int CODE_WIDTH = 400;
private static final int CODE_HEIGHT = 400;
private static final int FRONT_COLOR = 0x000000;
private static final int BACKGROUND_COLOR = 0xFFFFFF;

/**
 * 生成二维码 并 保存为图片:write(RenderedImage im,String formatName,File output)
 *
 * @param codeContent        :二维码参数内容,如果是一个网页地址,如 https://www.baidu.com/ 则 微信扫一扫会直接进入此地址
 *                           如果是一些参数,如 1541656080837,则微信扫一扫会直接回显这些参数值
 * @param codeImgFileSaveDir :二维码图片保存的目录,如 D:/codes
 * @param fileName           :二维码图片文件名称,带格式,如 123.png
 */
public static void createCodeToFile(String codeContent, File codeImgFileSaveDir, String fileName) throws NotFoundException{
    try {
        /** 参数检验*/
        if (codeContent == null || "".equals(codeContent.trim())) {
            System.out.println("二维码内容为空,不进行操作...");
            return;
        }
        codeContent = codeContent.trim();

        if (codeImgFileSaveDir == null || codeImgFileSaveDir.isFile()) {
            codeImgFileSaveDir = FileSystemView.getFileSystemView().getHomeDirectory();
            System.out.println("二维码图片存在目录为空,默认放在桌面...");
        }
        if (!codeImgFileSaveDir.exists()) {
            codeImgFileSaveDir.mkdirs();
            System.out.println("二维码图片存在目录不存在,开始创建...");
        }
        if (fileName == null || "".equals(fileName)) {
            fileName = new Date().getTime() + ".png";
            System.out.println("二维码图片文件名为空,随机生成 png 格式图片...");
        }

        /**com.google.zxing.EncodeHintType:编码提示类型,枚举类型
         * EncodeHintType.CHARACTER_SET:设置字符编码类型
         * EncodeHintType.ERROR_CORRECTION:设置误差校正
         *      ErrorCorrectionLevel:误差校正等级,L = ~7% correction、M = ~15% correction、Q = ~25% correction、H = ~30% correction
         *      不设置时,默认为 L 等级,等级不一样,生成的图案不同,但扫描的结果是一样的
         * EncodeHintType.MARGIN:设置二维码边距,单位像素,值越小,二维码距离四周越近
         * */
        Map<EncodeHintType, Object> hints = new HashMap();
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
        hints.put(EncodeHintType.MARGIN, 1);

        /**
         * MultiFormatWriter:多格式写入,这是一个工厂类,里面重载了两个 encode 方法,用于写入条形码或二维码
         *      encode(String contents,BarcodeFormat format,int width, int height,Map<EncodeHintType,?> hints)
         *      contents:条形码/二维码内容
         *      format:编码类型,如 条形码,二维码 等
         *      width:码的宽度
         *      height:码的高度
         *      hints:码内容的编码类型
         * BarcodeFormat:枚举该程序包已知的条形码格式,即创建何种码,如 1 维的条形码,2 维的二维码 等
         * BitMatrix:位(比特)矩阵或叫2D矩阵,也就是需要的二维码
         */
        MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
        BitMatrix bitMatrix = multiFormatWriter.encode(codeContent, BarcodeFormat.QR_CODE, CODE_WIDTH, CODE_HEIGHT, hints);

        /**java.awt.image.BufferedImage:具有图像数据的可访问缓冲图像,实现了 RenderedImage 接口
         * BitMatrix 的 get(int x, int y) 获取比特矩阵内容,指定位置有值,则返回true,将其设置为前景色,否则设置为背景色
         * BufferedImage 的 setRGB(int x, int y, int rgb) 方法设置图像像素
         *      x:像素位置的横坐标,即列
         *      y:像素位置的纵坐标,即行
         *      rgb:像素的值,采用 16 进制,如 0xFFFFFF 白色
         */
        BufferedImage bufferedImage = new BufferedImage(CODE_WIDTH, CODE_HEIGHT, BufferedImage.TYPE_INT_BGR);
        for (int x = 0; x < CODE_WIDTH; x++) {
            for (int y = 0; y < CODE_HEIGHT; y++) {
                bufferedImage.setRGB(x, y, bitMatrix.get(x, y) ? FRONT_COLOR : BACKGROUND_COLOR);
            }
        }

        /**javax.imageio.ImageIO java 扩展的图像IO
         * write(RenderedImage im,String formatName,File output)
         *      im:待写入的图像
         *      formatName:图像写入的格式
         *      output:写入的图像文件,文件不存在时会自动创建
         *
         * 即将保存的二维码图片文件*/
        File codeImgFile = new File(codeImgFileSaveDir, fileName);
        ImageIO.write(bufferedImage, "png", codeImgFile);

        System.out.println("二维码图片生成成功:" + codeImgFile.getPath());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * 生成二维码 并 输出到输出流————通常用于输出到网页上进行显示
 * 输出到网页与输出到磁盘上的文件中,区别在于最后一句 ImageIO.write
 * write(RenderedImage im,String formatName,File output):写到文件中
 * write(RenderedImage im,String formatName,OutputStream output):输出到输出流中
 *
 * @param codeContent  :二维码内容
 * @param outputStream :输出流,比如 HttpServletResponse 的 getOutputStream
 */
public static void createCodeToOutputStream(String codeContent, OutputStream outputStream) throws NotFoundException{
    try {
        /** 参数检验*/
        if (codeContent == null || "".equals(codeContent.trim())) {
            System.out.println("二维码内容为空,不进行操作...");
            return;
        }
        codeContent = codeContent.trim();

        /**com.google.zxing.EncodeHintType:编码提示类型,枚举类型
         * EncodeHintType.CHARACTER_SET:设置字符编码类型
         * EncodeHintType.ERROR_CORRECTION:设置误差校正
         *      ErrorCorrectionLevel:误差校正等级,L = ~7% correction、M = ~15% correction、Q = ~25% correction、H = ~30% correction
         *      不设置时,默认为 L 等级,等级不一样,生成的图案不同,但扫描的结果是一样的
         * EncodeHintType.MARGIN:设置二维码边距,单位像素,值越小,二维码距离四周越近
         * */
        Map<EncodeHintType, Object> hints = new HashMap();
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
        hints.put(EncodeHintType.MARGIN, 1);

        /**
         * MultiFormatWriter:多格式写入,这是一个工厂类,里面重载了两个 encode 方法,用于写入条形码或二维码
         *      encode(String contents,BarcodeFormat format,int width, int height,Map<EncodeHintType,?> hints)
         *      contents:条形码/二维码内容
         *      format:编码类型,如 条形码,二维码 等
         *      width:码的宽度
         *      height:码的高度
         *      hints:码内容的编码类型
         * BarcodeFormat:枚举该程序包已知的条形码格式,即创建何种码,如 1 维的条形码,2 维的二维码 等
         * BitMatrix:位(比特)矩阵或叫2D矩阵,也就是需要的二维码
         */
        MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
        BitMatrix bitMatrix = multiFormatWriter.encode(codeContent, BarcodeFormat.QR_CODE, CODE_WIDTH, CODE_HEIGHT, hints);

        /**java.awt.image.BufferedImage:具有图像数据的可访问缓冲图像,实现了 RenderedImage 接口
         * BitMatrix 的 get(int x, int y) 获取比特矩阵内容,指定位置有值,则返回true,将其设置为前景色,否则设置为背景色
         * BufferedImage 的 setRGB(int x, int y, int rgb) 方法设置图像像素
         *      x:像素位置的横坐标,即列
         *      y:像素位置的纵坐标,即行
         *      rgb:像素的值,采用 16 进制,如 0xFFFFFF 白色
         */
        BufferedImage bufferedImage = new BufferedImage(CODE_WIDTH, CODE_HEIGHT, BufferedImage.TYPE_INT_BGR);
        for (int x = 0; x < CODE_WIDTH; x++) {
            for (int y = 0; y < CODE_HEIGHT; y++) {
                bufferedImage.setRGB(x, y, bitMatrix.get(x, y) ? FRONT_COLOR : BACKGROUND_COLOR);
            }
        }

        /**
         * 区别就是以一句,输出到输出流中,如果第三个参数是 File,则输出到文件中
         */
        ImageIO.write(bufferedImage, "png", outputStream);

        System.out.println("二维码图片生成到输出流成功...");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * 根据本地二维码图片————————解析二维码内容
 * (注:图片必须是二维码图片,但也可以是微信用户二维码名片,上面有名称、头像也是可以的)
 *
 * @param file 本地二维码图片文件,如 E:\\logs\\2.jpg
 * @return
 * @throws Exception
 */
public static String parseQRCodeByFile(File file) throws NotFoundException{
    String resultStr = null;
    if (file == null || file.isDirectory() || !file.exists()) {
        return resultStr;
    }
    try {
        /**ImageIO 的 BufferedImage read(URL input) 方法用于读取网络图片文件转为内存缓冲图像
         * 同理还有:read(File input)、read(InputStream input)、、read(ImageInputStream stream)
         */
        BufferedImage bufferedImage = ImageIO.read(file);
        /**
         * com.google.zxing.client.j2se.BufferedImageLuminanceSource:缓冲图像亮度源
         * 将 java.awt.image.BufferedImage 转为 zxing 的 缓冲图像亮度源
         * 关键就是下面这几句:HybridBinarizer 用于读取二维码图像数据,BinaryBitmap 二进制位图
         */
        BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(bufferedImage);
        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
        Hashtable hints = new Hashtable();
        hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");
        /**
         * 如果图片不是二维码图片,则 decode 抛异常:com.google.zxing.NotFoundException
         * MultiFormatWriter 的 encode 用于对内容进行编码成 2D 矩阵
         * MultiFormatReader 的 decode 用于读取二进制位图数据
         */
        Result result = new MultiFormatReader().decode(bitmap, hints);
        resultStr = result.getText();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (NotFoundException e) {
        e.printStackTrace();
        System.out.println("-----图片非二维码图片:" + file.getPath());
    }
    return resultStr;
}


/**
 * 根据网络二维码图片————————解析二维码内容
 * (区别仅仅在于 ImageIO.read(url); 这一个重载的方法)
 *
 * @param url 二维码图片网络地址,如 https://res.wx.qq.com/mpres/htmledition/images/mp_qrcode3a7b38.gif
 * @return
 * @throws Exception
 */
public static String parseQRCodeByUrl(URL url) throws NotFoundException{
    String resultStr = null;
    if (url == null) {
        return resultStr;
    }
    try {
        /**ImageIO 的 BufferedImage read(URL input) 方法用于读取网络图片文件转为内存缓冲图像
         * 同理还有:read(File input)、read(InputStream input)、、read(ImageInputStream stream)
         *
         * 如果图片网络地址错误,比如不能访问,则 read 抛异常:javax.imageio.IIOException: Can't get input stream from URL!
         */
        BufferedImage bufferedImage = ImageIO.read(url);
        /**
         * com.google.zxing.client.j2se.BufferedImageLuminanceSource:缓冲图像亮度源
         * 将 java.awt.image.BufferedImage 转为 zxing 的 缓冲图像亮度源
         * 关键就是下面这几句:HybridBinarizer 用于读取二维码图像数据,BinaryBitmap 二进制位图
         */
        BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(bufferedImage);
        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
        Hashtable hints = new Hashtable();
        /**
         * 如果内容包含中文,则解码的字符集格式应该和编码时一致
         */
        hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");
        /**
         * 如果图片不是二维码图片,则 decode 抛异常:com.google.zxing.NotFoundException
         * MultiFormatWriter 的 encode 用于对内容进行编码成 2D 矩阵
         * MultiFormatReader 的 decode 用于读取二进制位图数据
         */
        Result result = new MultiFormatReader().decode(bitmap, hints);
        resultStr = result.getText();
    } catch (IOException e) {
        e.printStackTrace();
        System.out.println("-----二维码图片地址错误:" + url);
    } catch (NotFoundException e) {
        e.printStackTrace();
        System.out.println("-----图片非二维码图片:" + url);
    }
    return resultStr;
}

public static void main(String[] args) throws NotFoundException, MalformedURLException {
    File localFile = new File("E:\\logs\\1.png");
    String localQRcodeContent = parseQRCodeByFile(localFile);
    System.out.println(localFile + " 二维码内容:" + localQRcodeContent);

    URL url = new URL("https://res.wx.qq.com/mpres/htmledition/images/mp_qrcode3a7b38.gif");
    String netQRcodeContent = parseQRCodeByUrl(url);
    System.out.println(url + " 二维码内容:" + netQRcodeContent);
}

}

只是加了一个网上下的二维码类:https://blog.csdn.net/wangmx1993328/article/details/83856391#Maven%20%E4%BE%9D%E8%B5%96

com.google.zxing
core
3.2.1


com.google.zxing
javase
3.3.3

然后引入了依赖,就直接报错了。

发帖提示没看到? 插入代码按钮没看到?

原来有这个类了,谢谢,我直接下载使用。

可能是框架什么地方,被我动到的关系,用上面的类报了一个新的错误

[ERROR] 14:46:17.182 [main] org.nutz.boot.NbApp - something happen!!
org.nutz.ioc.IocException: IocBean[dubboManager -> dubboAnnotationBean] throw Exception when creating
	at org.nutz.ioc.impl.ObjectMakerImpl.make(ObjectMakerImpl.java:153)
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:241)
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:271)
	at org.nutz.integration.dubbo.DubboManager.init(DubboManager.java:31)
	at org.nutz.integration.dubbo.DubboManager._init(DubboManager.java:24)
	at org.nutz.integration.dubbo.DubboManager$FM$_init$cff301be46c87e2fbea60f4ef344bacb.invoke(DubboManager.java)
	at org.nutz.ioc.impl.ObjectMakerImpl$2.trigger(ObjectMakerImpl.java:181)
	at org.nutz.ioc.weaver.DefaultWeaver.onCreate(DefaultWeaver.java:89)
	at org.nutz.ioc.impl.ObjectMakerImpl.make(ObjectMakerImpl.java:141)
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:241)
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:271)
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:161)
	at org.nutz.boot.starter.dubbo.DubboStarter.start(DubboStarter.java:17)
	at org.nutz.boot.AppContext.startServers(AppContext.java:310)
	at org.nutz.boot.NbApp.execute(NbApp.java:210)
	at org.nutz.boot.NbApp.run(NbApp.java:182)
	at com.cnvp.app.sys.DubboRpcSysMainLauncher.main(DubboRpcSysMainLauncher.java:44)
Caused by: java.lang.NoClassDefFoundError: Lcom/google/zxing/qrcode/decoder/ErrorCorrectionLevel;
	at java.lang.Class.getDeclaredFields0(Native Method)
	at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
	at java.lang.Class.getDeclaredFields(Class.java:1916)
	at org.nutz.integration.dubbo.AnnotationBean._init(AnnotationBean.java:46)
	at org.nutz.integration.dubbo.AnnotationBean$FM$_init$cff301be46c87e2fbea60f4ef344bacb.invoke(AnnotationBean.java)
	at org.nutz.ioc.impl.ObjectMakerImpl$2.trigger(ObjectMakerImpl.java:181)
	at org.nutz.ioc.weaver.DefaultWeaver.onCreate(DefaultWeaver.java:89)
	at org.nutz.ioc.impl.ObjectMakerImpl.make(ObjectMakerImpl.java:141)
	... 16 common frames omitted
Caused by: java.lang.ClassNotFoundException: com.google.zxing.qrcode.decoder.ErrorCorrectionLevel
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 24 common frames omitted
[INFO ] 14:46:17.187 [main] org.nutz.ioc.impl.NutIoc - org.nutz.ioc.impl.NutIoc@590845366 is closing. startup date [19-06-20 14:46:16.304]

qrcode那插件自带依赖, 把你自己加zxing依赖去掉

是去掉了自己掉依赖,我把这个类整合进一个核心层里了。

<?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">
    <parent>
        <artifactId>dts-partent</artifactId>
        <groupId>com.dts</groupId>
        <version>1.0.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <packaging>jar</packaging>
    <artifactId>dts-core</artifactId>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <zxing.value>3.3.3</zxing.value>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.nutz</groupId>
            <artifactId>nutzboot-starter-nutz-dao</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>${zxing.value}</version>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>${zxing.value}</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <compilerArgs>
                        <arg>-parameters</arg>
                    </compilerArgs>
                    <useIncrementalCompilation>false</useIncrementalCompilation>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>3.0.1</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <charset>UTF-8</charset>
                    <docencoding>UTF-8</docencoding>
                </configuration>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

再也不见,哈哈,发现是什么问题了,包的名称的问题。

添加回复
请先登陆
回到顶部