bestlong 怕失憶筆記

當健忘由隨機逐漸趨向常態時,作筆記是非常必要的

Entries for the ‘Java’ Category

SEVERE: Problems copying method. Incompatible JVM?

接手幾個基於 Grails 2.3.11 的老專案,用 SDKMan 很方便的安裝好 OpenJDK 8 與 Grails 開發環境後,開始一陣操弄

grails clean

先碰到 Resolve error obtaining dependencies 錯誤,因為 maven repositories 網址都改變了需要手動替換 mavenRepo 設定

grails compile

相依性處理到沒問題後

grails run-app

炸了,錯誤訊息節錄如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Oct 05, 2022 8:06:32 PM org.springsource.loaded.jvm.JVM copyMethod
SEVERE: Problems copying method. Incompatible JVM?
java.lang.reflect.InvocationTargetException
        at sun.reflect.GeneratedMethodAccessor53.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.springsource.loaded.jvm.JVM.copyMethod(JVM.java:134)
        at org.springsource.loaded.ri.OriginalClassInvoker.createJavaMethod(OriginalClassInvoker.java:68)
        at org.springsource.loaded.ri.ReflectiveInterceptor.jlClassGetMethods(ReflectiveInterceptor.java:168)
        at org.springframework.beans.ExtendedBeanInfoFactory.supports(ExtendedBeanInfoFactory.java:53)
        at org.springframework.beans.ExtendedBeanInfoFactory.getBeanInfo(ExtendedBeanInfoFactory.java:45)
        at org.springframework.beans.CachedIntrospectionResults.<init>(CachedIntrospectionResults.java:270)
        at org.springframework.beans.CachedIntrospectionResults.forClass(CachedIntrospectionResults.java:186)
        at org.springframework.beans.BeanUtils.getPropertyDescriptors(BeanUtils.java:360)
        at org.codehaus.groovy.grails.commons.ClassPropertyFetcher.init(ClassPropertyFetcher.java:193)
        at org.codehaus.groovy.grails.commons.ClassPropertyFetcher.<init>(ClassPropertyFetcher.java:91)
        at org.codehaus.groovy.grails.commons.ClassPropertyFetcher.forClass(ClassPropertyFetcher.java:82)
        at org.codehaus.groovy.grails.commons.ClassPropertyFetcher.forClass(ClassPropertyFetcher.java:63)
        at org.codehaus.groovy.grails.commons.AbstractGrailsClass.<init>(AbstractGrailsClass.java:84)
        at org.codehaus.groovy.grails.plugins.AbstractGrailsPlugin$GrailsPluginClass.<init>(AbstractGrailsPlugin.java:65)
        at org.codehaus.groovy.grails.plugins.DefaultGrailsPlugin.initialisePlugin(DefaultGrailsPlugin.java:138)
        at org.codehaus.groovy.grails.plugins.DefaultGrailsPlugin.<init>(DefaultGrailsPlugin.java:117)
        at org.codehaus.groovy.grails.plugins.DefaultGrailsPlugin.<init>(DefaultGrailsPlugin.java:264)
        at org.codehaus.groovy.grails.plugins.DefaultGrailsPluginManager.createGrailsPlugin(DefaultGrailsPluginManager.java:412)
        at org.codehaus.groovy.grails.plugins.DefaultGrailsPluginManager.findUserPlugins(DefaultGrailsPluginManager.java:437)
        at org.codehaus.groovy.grails.plugins.DefaultGrailsPluginManager.attemptLoadPlugins(DefaultGrailsPluginManager.java:349)
        at org.codehaus.groovy.grails.plugins.DefaultGrailsPluginManager.loadPlugins(DefaultGrailsPluginManager.java:257)
        at org.codehaus.groovy.grails.project.plugins.GrailsProjectPluginLoader$_loadPlugins_closure2.doCall(GrailsProjectPluginLoader.groovy:95)
        at org.codehaus.groovy.grails.project.plugins.GrailsProjectPluginLoader$_loadPlugins_closure2.doCall(GrailsProjectPluginLoader.groovy)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1270)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1086)
        at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:910)
        at groovy.lang.Closure.call(Closure.java:411)
        at groovy.lang.Closure.call(Closure.java:405)
        at org.codehaus.groovy.grails.cli.api.BaseSettingsApi.profile(BaseSettingsApi.java:342)
        at org.codehaus.groovy.grails.project.plugins.GrailsProjectPluginLoader.loadPlugins(GrailsProjectPluginLoader.groovy:91)
        at org.codehaus.groovy.grails.plugins.GrailsPluginManagerFactoryBean.afterPropertiesSet(GrailsPluginManagerFactoryBean.java:74)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1571)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1509)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:615)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
        at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
        at org.codehaus.groovy.grails.web.context.GrailsContextLoader.initWebApplicationContext(GrailsContextLoader.java:70)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4973)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5467)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: Can not copy a non-root Method
        at java.lang.reflect.Method.copy(Method.java:151)
        ... 65 more

搜尋網路後發現最低從 1.8.0_40 版本開始碰到相同問題

只好到 Oracle Java archive 去下載舊版 JDK

https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html

下載使用 Java SE Development Kit 8u40 版本測試確實會碰到問題

接著使用 Java SE Development Kit 8u31 版本可以讓 grails run-app 正常啟動,不過這樣的選擇是否能穩定運作無法保證。有疑慮可考慮改用 JDK 7 的最終版本。

Leave a Comment

解決 pom.xml 用到 prerequisites tag 升級到 Maven 3 後會出現的警告

最近試著將一個 Maven 2 的軟體專案更新到 Maven 3 就開始在執行 mvn 命令時出現如下警告資訊:

[WARNING] The project tw.idv.bestlong:demo-app:pom:1.0.0-SNAPSHOT uses prerequisites which is only intended for maven-plugin projects but not for non maven-plugin projects. For such purposes you should use the maven-enforcer-plugin. See https://maven.apache.org/enforcer/enforcer-rules/requireMavenVersion.html

這是因為原本專案內的 pom.xml 內有用到 prerequisites tag 設定了檢查條件,這個 tag 到了 Maven 3 要 deprecated 了,所以會顯示通知改用 maven-enforcer-plugin 處理,並將 pom.xml 內的 prerequisites tag 移除掉,警告訊息就會消失。

相關的 issus 如下:

https://issues.apache.org/jira/browse/MNG-5297
https://issues.apache.org/jira/browse/MNG-6092

Comments (1)

在 mac 環境安裝 JDK 6

雖然 JDK 已經演進到 8 的版本,還是會有有需要用到舊版的狀況。

而 Java SE Development Kit 6 在 Oracle 官方沒有直接提供給 mac 用的版本,需要到 Apple 網站下載

請開啟瀏覽器開啟連結到 https://developer.apple.com/download/more/

需要用到 Applie ID 帳號登入

mac-install-jdk6_1

進入畫面後在左側搜尋框查詢 Java

mac-install-jdk6_2

然後展開最新的 Developer Package 就可以看到 dmg 得下載連結

mac-install-jdk6_3

下載後直接安裝就完成 JDK 6 的安裝。

Leave a Comment

在 Struts2.2 使用 DateTimePicker 來輸入日期

環境是使用 struts-2.2.1.1 在 lib 增加 struts2-dojo-plugin-2.2.1.1.jar 後就可以使用 DateTimePicker 來輸入日期.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%@ taglib uri="/struts-dojo-tags" prefix="sx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>DateTimePicker Test</title>
<s:head />
<sx:head />
</head>
<body>
<center>
<s:form method="post" >
<sx:datetimepicker name="member.birthday" label="出生日" displayFormat="yyyy/MM/dd" />
<tr><td> </td><td><s:submit action="memberSave" value="Save" /></td></tr>
</s:form>

</center>
</body>
</html>

官方資料:
http://struts.apache.org/2.x/docs/datetimepicker.html
http://struts.apache.org/2.2.1.1/docs/datetimepicker.html

Leave a Comment

Java API Class 不會用! 搜尋引擎找範例給你

Java API Class 規模非常龐大,市面上的書籍也因為篇幅有限無法做詳盡的介紹而且範例程式碼也不多。看官方文件有時又像天書令人摸不著頭緒。想看 Open Source 的內容又要大費周章。

在網路上發現了這個程式碼搜尋引擎,他是以幾個具高知名度的 Java 開放原始碼專案例如:ant、Tomcat、Spring…等的程式碼,經過分析後所建立的資料庫,可以方便的查詢某個 Class 是在這些專案中是如何應用的。

例如用:Thread 這個當關鍵字來查詢,就出現:

先列出相關的 Java API Class 清單,再來進入 currentThread 來看看

可以看到下圖查詢結果中有顯示在那個專案的那個程式碼以及行號位置

還可進一步點選 Class 的連結直接檢視該 Class 實作的完整內容

這樣就可以很快的去研究別人是如何實作的,來提昇學習與開發效率,真的很方便。

http://www.jexamples.com/

Comments (1)

  • 工商服務

    廣告讀取中...
  • 近期留言

  • 標籤

  • 彙整