GVKun编程网logo

无法打包Grails 3应用程序-NoSuchMethodError(文件无法打包)

20

最近很多小伙伴都在问无法打包Grails3应用程序-NoSuchMethodError和文件无法打包这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展8、NoSuchMethodEr

最近很多小伙伴都在问无法打包Grails 3应用程序-NoSuchMethodError文件无法打包这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展8、NoSuchMethodError原因及解决办法、android NoSuchMethodError getDrawable、Android 调用 Charset.forName () 出现 NoSuchMethodError 异常、Arthas 实践 -- 排查 Spring Boot 应用 NoSuchMethodError等相关知识,下面开始了哦!

本文目录一览:

无法打包Grails 3应用程序-NoSuchMethodError(文件无法打包)

无法打包Grails 3应用程序-NoSuchMethodError(文件无法打包)

我正在尝试打包Grails 3.1.5应用程序。

运行grails package(或grails war)会产生以下结果:

FAILURE: Build failed with an exception.* What went wrong:org.codehaus.groovy.runtime.DefaultGroovyMethods.each(Ljava/util/List;Lgroovy/lang/Closure;)Ljava/util/List;* Try:Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.BUILD FAILEDTotal time: 2.205 secs| Error Command [package] error: Could not execute build using Gradle distribution ''https://services.gradle.org/distributions/gradle-2.6-bin.zip''. (Use --stacktrace to see the full trace)

运行时--stacktrace给出:

Caused by: java.lang.NoSuchMethodError: org.codehaus.groovy.runtime.DefaultGroovyMethods.each(Ljava/util/List;Lgroovy/lang/Closure;)Ljava/util/List;        at asset.pipeline.gradle.AssetCompile.getSource(AssetCompile.groovy:188)        at asset.pipeline.gradle.AssetCompile_Decorated.getSource(Unknown Source)        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$PropertyInfo$4.create(AnnotationProcessingTaskFactory.java:460)        at org.gradle.util.SingleMessageLogger.whileDisabled(SingleMessageLogger.java:166)        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$PropertyInfo.getValue(AnnotationProcessingTaskFactory.java:458)        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$Validator$1.call(AnnotationProcessingTaskFactory.java:262)

我的版本是:

| Grails Version: 3.1.5| Groovy Version: 2.4.6| JVM Version: 1.8.0_91

我已经删除了.gradle缓存文件夹,运行grails clean,但是没有运气。

编辑 :我当前的解决方案是使用gradle建立战争;gradle war在构建中生成一个uber-
jar,我可以将其用于部署。一定会很好地为此使用grails(除非我遗漏了一些东西)。

答案1

小编典典

我通过使用以下方法解决了这个问题:

./gradlew clean assemble

这会在中产生WAR ./build/libs/

这是可能的,这是一个错误的Grails中造成了,作为讨论在这里。

8、NoSuchMethodError原因及解决办法

8、NoSuchMethodError原因及解决办法

android NoSuchMethodError getDrawable

android NoSuchMethodError getDrawable

–android NoSuchMethodError getDrawable–
测试手机MIUI4
报错代码如下:

draw = ctx.getDrawable(R.drawable.more_up);

修改后不报错代码如下:

draw = ctx.getResources().getDrawable(R.drawable.more_up);

问题解决了,具体原因没有及时查看,有知道达人可以解惑

Android 调用 Charset.forName () 出现 NoSuchMethodError 异常

Android 调用 Charset.forName () 出现 NoSuchMethodError 异常

看看下面的代码

private final static Charset UNICODE_CHARSET = Charset.forName("UTF-8");

public String makeNewUnicodeString(byte[] octects) {
    return new String(octects, UNICODE_CHARSET);
}

在电脑上运行正常,但是在模拟器上执行抛出异常

java.lang.NoSuchMethodError: java.lang.String.<init>

但是使用下面的代码就能正常执行

public String makeUnicodeString(byte[] octects) {
    try {
        return new String(octects, "UTF-8")
    } catch (UnsupportedEncodingException uee) {
       // never throw.
    }
}

我的环境是 Adroid 2.2 API 8, rev2.

 

Arthas 实践 -- 排查 Spring Boot 应用 NoSuchMethodError

Arthas 实践 -- 排查 Spring Boot 应用 NoSuchMethodError

前言

有时 spring boot 应用会遇到 java.lang.NoSuchMethodError 的问题,下面以具体的 demo 来说明怎样利用 arthas 来排查。

Demo: https://github.com/hengyunabc/spring-boot-inside/tree/master/demo-NoSuchMethodError

在应用的 main 函数里 catch 住异常,保证进程不退出

很多时候当应用抛出异常后,进程退出了,就比较难排查问题。可以先改下 main 函数,把异常 catch 住:

    public static void main(String[] args) throws IOException {
        try {
            SpringApplication.run(DemoNoSuchMethodErrorApplication.class, args);
        } catch (Throwable e) {
            e.printStackTrace();
        }
        // block
        System.in.read();
    }

Demo 启动之后,抛出的异常是:

java.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotationAwareOrderComparator.sort(Ljava/util/List;)V
    at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:394)
    at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:383)
    at org.springframework.boot.SpringApplication.initialize(SpringApplication.java:249)
    at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:225)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
    at com.example.demoNoSuchMethodError.DemoNoSuchMethodErrorApplication.main(DemoNoSuchMethodErrorApplication.java:13)

显然,异常的意思是 AnnotationAwareOrderComparator 缺少 sort(Ljava/util/List;)V 这个函数。

安装 arthas

参考:https://alibaba.github.io/arthas/install-detail.html

使用 sc 命令查找类所在的 jar 包

应用需要抛出了异常,但是进程还没有退出,我们用 arthas 来 attach 上去。比如在 mac 下面:

./as.sh

然后选择 com.example.demoNoSuchMethodError.DemoNoSuchMethodErrorApplication 进程。

再执行 sc 命令来查找类:

$ sc -d org.springframework.core.annotation.AnnotationAwareOrderComparator
 class-info        org.springframework.core.annotation.AnnotationAwareOrderComparator
 code-source       /Users/hengyunabc/.m2/repository/org/springframework/spring/2.5.6.SEC03/spring-2.5.6.SEC03.jar
 name              org.springframework.core.annotation.AnnotationAwareOrderComparator
 isInterface       false
 isAnnotation      false
 isEnum            false
 isAnonymousClass  false
 isArray           false
 isLocalClass      false
 isMemberClass     false
 isPrimitive       false
 isSynthetic       false
 simple-name       AnnotationAwareOrderComparator
 modifier          public
 annotation
 interfaces
 super-class       +-org.springframework.core.OrderComparator
                     +-java.lang.Object
 class-loader      +-sun.misc.Launcher$AppClassLoader@5c647e05
                     +-sun.misc.Launcher$ExtClassLoader@689e3d07
 classLoaderHash   5c647e05

Affect(row-cnt:1) cost in 41 ms.

可以看到 AnnotationAwareOrderComparator 是从 spring-2.5.6.SEC03.jar 里加载的。

使用 jad 查看反编绎的源代码

下面使用 jad 命令来查看 AnnotationAwareOrderComparator 的源代码

$ jad org.springframework.core.annotation.AnnotationAwareOrderComparator

ClassLoader:
+-sun.misc.Launcher$AppClassLoader@5c647e05
  +-sun.misc.Launcher$ExtClassLoader@689e3d07

Location:
/Users/hengyunabc/.m2/repository/org/springframework/spring/2.5.6.SEC03/spring-2.5.6.SEC03.jar

/*
 * Decompiled with CFR 0_132.
 */
package org.springframework.core.annotation;

import java.lang.annotation.Annotation;
import org.springframework.core.OrderComparator;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;

public class AnnotationAwareOrderComparator
extends OrderComparator {
    protected int getOrder(Object obj) {
        Order order;
        if (obj instanceof Ordered) {
            return ((Ordered)obj).getOrder();
        }
        if (obj != null && (order = obj.getClass().getAnnotation(Order.class)) != null) {
            return order.value();
        }
        return Integer.MAX_VALUE;
    }
}

Affect(row-cnt:1) cost in 286 ms.

可见,AnnotationAwareOrderComparator 的确没有 sort(Ljava/util/List;)V 函数。

排掉依赖,解决问题

从上面的排查里,可以确定

  • AnnotationAwareOrderComparator 来自 spring-2.5.6.SEC03.jar,的确没有 sort(Ljava/util/List;)V 函数。

所以,可以检查 maven 依赖,把 spring 2 的 jar 包排掉,这样子就可以解决问题了。

总结

  • 仔细看 NoSuchMethodError 的异常信息,了解是什么类缺少了什么函数
  • 利用 arthas 来查找类,反编绎源码,确认问题

链接

  • Arthas--Alibaba 开源 Java 诊断利器

  • Arthas Github

  • Arthas Gitee

关于无法打包Grails 3应用程序-NoSuchMethodError文件无法打包的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于8、NoSuchMethodError原因及解决办法、android NoSuchMethodError getDrawable、Android 调用 Charset.forName () 出现 NoSuchMethodError 异常、Arthas 实践 -- 排查 Spring Boot 应用 NoSuchMethodError的相关信息,请在本站寻找。

本文标签: