2014-02-20 105 views
1

我有兩個項目。我的一個項目(比如project2)依賴於另一個項目(project2)。這兩個項目都是maven項目,project1在project2的依賴項中列出。當我編譯project2時,project1中的所有類文件應該被複制到project2(我想象)。但是,我發現project1中的其中一個類文件的文件大小與project2中同一類的類文件的文件大小不同。如果我反編譯文件,我會得到如下結果。截斷Java類文件

反編譯FacebookUserDetail.class從PROJECT1:

package com.***.domain.user.external; 

import com.***.domain.user.UserDetailType; 
import java.util.List; 
import javax.persistence.Entity; 
import javax.persistence.TypedQuery; 
import org.aspectj.lang.JoinPoint; 
import org.aspectj.runtime.internal.CFlowCounter; 
import org.aspectj.runtime.reflect.Factory; 
import org.springframework.beans.factory.annotation.Configurable; 
import org.springframework.beans.factory.aspectj.AbstractDependencyInjectionAspect; 
import org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect; 
import org.springframework.mock.staticmock.AnnotationDrivenStaticEntityMockingControl; 

@Configurable 
@Entity 
public class FacebookUserDetail extends ExternalUserDetail 
{ 
    public FacebookUserDetail() 
    { 
    JoinPoint localJoinPoint = Factory.makeJP(ajc$tjp_1, this, this); if ((!AnnotationBeanConfigurerAspect.ajc$if$bb0((Configurable)getClass().getAnnotation(Configurable.class))) && (AbstractDependencyInjectionAspect.ajc$if$6f1(localJoinPoint))) AnnotationBeanConfigurerAspect.aspectOf().ajc$afterReturning$org_springframework_beans_factory_aspectj_AbstractDependencyInjectionAspect$2$1ea6722c(this); 
    } 

    public static FacebookUserDetail findFacebookUserDetailByFacebookId(String facebookId) 
    { 
    String str = facebookId; JoinPoint localJoinPoint = Factory.makeJP(ajc$tjp_0, null, null, str); if ((AnnotationDrivenStaticEntityMockingControl.ajc$cflowCounter$1.isValid()) && (AnnotationDrivenStaticEntityMockingControl.hasAspect())) return (FacebookUserDetail)findFacebookUserDetailByFacebookId_aroundBody1$advice(str, localJoinPoint, AnnotationDrivenStaticEntityMockingControl.aspectOf(), null, ajc$tjp_0, localJoinPoint); return findFacebookUserDetailByFacebookId_aroundBody0(str, localJoinPoint); 
    } 

    public UserDetailType getExternalUserDetailType() 
    { 
    return UserDetailType.FACEBOOK; 
    } 

    static 
    { 
    ajc$preClinit(); } 
    public static long countFacebookUserDetails() { return FacebookUserDetail_Roo_Entity.ajc$interMethod$com_nim_domain_user_external_FacebookUserDetail_Roo_Entity$com_nim_domain_user_external_FacebookUserDetail$countFacebookUserDetails(); } 
    public static List<FacebookUserDetail> findAllFacebookUserDetails() { return FacebookUserDetail_Roo_Entity.ajc$interMethod$com_nim_domain_user_external_FacebookUserDetail_Roo_Entity$com_nim_domain_user_external_FacebookUserDetail$findAllFacebookUserDetails(); } 
    public static FacebookUserDetail findFacebookUserDetail(Long paramLong) { return FacebookUserDetail_Roo_Entity.ajc$interMethod$com_nim_domain_user_external_FacebookUserDetail_Roo_Entity$com_nim_domain_user_external_FacebookUserDetail$findFacebookUserDetail(paramLong); } 
    public static List<FacebookUserDetail> findFacebookUserDetailEntries(int paramInt1, int paramInt2) { return FacebookUserDetail_Roo_Entity.ajc$interMethod$com_nim_domain_user_external_FacebookUserDetail_Roo_Entity$com_nim_domain_user_external_FacebookUserDetail$findFacebookUserDetailEntries(paramInt1, paramInt2); } 
    public static TypedQuery<FacebookUserDetail> findFacebookUserDetailsByUserIdEquals(String paramString) { return FacebookUserDetail_Roo_Finder.ajc$interMethod$com_nim_domain_user_external_FacebookUserDetail_Roo_Finder$com_nim_domain_user_external_FacebookUserDetail$findFacebookUserDetailsByUserIdEquals(paramString); } 
    public String toString() { return FacebookUserDetail_Roo_ToString.ajc$interMethod$com_nim_domain_user_external_FacebookUserDetail_Roo_ToString$com_nim_domain_user_external_FacebookUserDetail$toString(this); } 

} 

反編譯FacebookUserDetail.class從項目2

package com.***.domain.user.external; 

import com.***.domain.user.UserDetailType; 
import org.aspectj.lang.JoinPoint; 
import org.aspectj.runtime.internal.CFlowCounter; 
import org.aspectj.runtime.reflect.Factory; 
import org.springframework.beans.factory.annotation.Configurable; 
import org.springframework.beans.factory.aspectj.AbstractDependencyInjectionAspect; 
import org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect; 
import org.springframework.mock.staticmock.AnnotationDrivenStaticEntityMockingControl; 

public class FacebookUserDetail extends ExternalUserDetail 
{ 
    public FacebookUserDetail() 
    { 
    JoinPoint localJoinPoint = Factory.makeJP(ajc$tjp_1, this, this); if ((!AnnotationBeanConfigurerAspect.ajc$if$bb0((Configurable)getClass().getAnnotation(Configurable.class))) && (AbstractDependencyInjectionAspect.ajc$if$6f1(localJoinPoint))) AnnotationBeanConfigurerAspect.aspectOf().ajc$afterReturning$org_springframework_beans_factory_aspectj_AbstractDependencyInjectionAspect$2$1ea6722c(this); 
    } 

    public static FacebookUserDetail findFacebookUserDetailByFacebookId(String facebookId) 
    { 
    String str = facebookId; JoinPoint localJoinPoint = Factory.makeJP(ajc$tjp_0, null, null, str); if ((AnnotationDrivenStaticEntityMockingControl.ajc$cflowCounter$1.isValid()) && (AnnotationDrivenStaticEntityMockingControl.hasAspect())) return (FacebookUserDetail)findFacebookUserDetailByFacebookId_aroundBody1$advice(str, localJoinPoint, AnnotationDrivenStaticEntityMockingControl.aspectOf(), null, ajc$tjp_0, localJoinPoint); return findFacebookUserDetailByFacebookId_aroundBody0(str, localJoinPoint); 
    } 

    public UserDetailType getExternalUserDetailType() 
    { 
    return UserDetailType.FACEBOOK; 
    } 

    static 
    { 
    ajc$preClinit(); 
    } 
} 

我的問題是:什麼是在項目2截斷類文件可能的原因?

+1

依賴項目的類文件通常安裝在maven本地存儲庫中。你確定複製的類是來自maven而不是你的IDE或其他構建者嗎? –

+0

我們製作獨立於本地Maven存儲庫的可安裝debian軟件包。所以,我不認爲複製的類來自maven。 – riship89

+0

檢查哪些編譯器正在生成這些類。不同的編譯器可能會導致不同的類,從而導致不同的反編譯源。 –

回答

0

關於這一部分:當我編譯項目2,從PROJECT1的所有類文件應該被複制到PROJECT2

這實際上並非如此,Maven的這兩個項目編譯成兩個獨立的罐子,如果項目如果項目2的類型爲WAR,則將project1.jar複製到project2的WEB-INF/lib中。

兩個類文件之間的區別表明,project2版本沒有應用Roo方面,儘管它也是使用AspectJ編譯的。

嘗試從命令行生成項目只需關閉所有IDE並比較兩個版本以查看是否仍存在相同的問題。這可能是因爲您的IDE正在使用aspectJ編譯類,但沒有正確的Roo方面。

另外看看這個report必須在依賴和依賴項目上添加aspectj插件,以及關於Roo多模塊maven支持的3.7.2.2. Limitations的文檔。

+0

我剛剛獲得了描述方案的debian軟件包。我無法在當前版本中重現它。雖然問題解決了,但我們首先想知道問題存在的確切原因。 – riship89

+0

那麼這意味着debian軟件包中版本的構建不是使用maven完成的,或者是使用具有某個bug的構建版本完成的。嘗試檢查生成該軟件包的人,並查看他們用於製作該版本的內容和版本 –