2014-02-20 81 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的构建版本完成的。尝试检查生成该软件包的人,并查看他们用于制作该版本的内容和版本 –