2015-01-16 25 views
7

tarafından desteklenmeyen. Her şey gayet iyi çalışıyor önce, ama aniden durup bir nedeni ne olabilir hiçbir şey hatırlamıyorum. Ne yöntem organları için aynı ayar ve açıkken değiştirilebilen başka projemiz var garip çalışıyor.IntellJ Fikir erkek kedi Sıcak değiştirme başarısız oldu: şema değişikliği Operasyonu uygulanmadı Projemde değiştirilen bir yöntem gövdesi sınıf (hot swap) yeniden çalıştığınızda bu hata var VM

enter image description here

enter image description here

Ve VM ayarlarını:

-XX:PermSize=512m 
-XX:MaxPermSize=1024m 
-Xms1024m 
-Xmx2048m 
-Dcatalina.home="C:\Programy\apache-tomcat-7.0.57" 
-Djava.endorsed.dirs="C:\Programy\apache-tomcat-7.0.57\endorsed" 
-javaagent:C:\Programy\apache-tomcat-7.0.57/lib/spring-instrument-3.1.2.RELEASE.jar 
-Dspring.profiles.active=closeMonthTest 
-Dnpk.jobs.enabled=true 

ve burada çalışan benim için yapılandırma İşte

için yapılandırma projeyi çalışan DEĞİLDİR proje:

enter image description here

enter image description here

VM seçenekleri:

-XX:PermSize=512m 
-XX:MaxPermSize=1024m 
-Xms1024m 
-Xmx2048m 
-Dcatalina.home="C:\Programy\apache-tomcat-7.0.57" 
-Djava.endorsed.dirs="C:\Programy\apache-tomcat-7.0.57\endorsed" 
-javaagent:C:\Programy\apache-tomcat-7.0.57/lib/spring-instrument-3.1.2.RELEASE.jar 
-Dspring.profiles.active=test 

cevap

7

Bu kodu olmadan temel nedenini bulmak çok zordur. Bu etki Javac erişime izin vermek için üreten bir sentetik yöntem erişimi $ 000 ile açıklanabilir

public class Test { 

    static class Inner { 

     private void getPrivate(int i) { 
      Thread.dumpStack(); 
     } 

     private void getPrivate() { 
      Thread.dumpStack(); 
     } 
    } 

    public static void main(String[] args) { 
     Inner inner = new Inner(); 
     inner.getPrivate(0); 
     inner.getPrivate(); 
    } 
} 

: Ben sadece bir yöntem gövdesine değişse bile Ancak, Java derleyici sentetik yöntemler yaratacak yapay test case yazabilir Inner sınıfının özel bir üyesi.

javac Test.java 
javap -c -private Test\$Inner 
... 
    static void access$000(edu.Test$Inner, int); 
    Code: 
     0: aload_0  
     1: iload_1  
     2: invokespecial #2     // Method getPrivate:(I)V 
     5: return   

    static void access$100(edu.Test$Inner); 
    Code: 
     0: aload_0  
     1: invokespecial #1     // Method getPrivate:()V 
     4: return   

ana iki yöntemden sırasını değiştirmek edelim: derleyici yöntemleri imzaları değişti Bunun sonucunda

public static void main(String[] args) { 
     Inner inner = new Inner(); 
     inner.getPrivate(); 
     inner.getPrivate(0); 
    } 

. yöntemin access$000 imzası değiştirildiği için

bakış HotSwap açıdan
... 
    static void access$000(edu.Test$Inner); 
    Code: 
     0: aload_0  
     1: invokespecial #2     // Method getPrivate:()V 
     4: return   

    static void access$100(edu.Test$Inner, int); 
    Code: 
     0: aload_0  
     1: iload_1  
     2: invokespecial #1     // Method getPrivate:(I)V 
     5: return  

bu değişiklik yasaktır.

+1

iyi cevap, teşekkürler – Regenschein