2014-02-20 7 views
1

У меня есть два проекта. Мой один проект (например, project2) зависит от другого проекта (project2). Оба проекта - проект maven, а project1 указан в зависимостях проекта2. Когда я компилирую project2, все файлы классов из project1 должны быть скопированы в project2 (я полагаю). Но я вижу, что размер файла одного из файлов класса в проекте1 отличается от размера файла файла класса для того же класса в 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, а не от вашей среды разработки или других разработчиков? –

+0

Мы делаем устанавливаемые пакеты debian, которые не зависят от локального хранилища maven. Итак, я не думаю, что скопированные классы приходят из maven. – riship89

+0

Проверьте, какие компиляторы генерируют эти классы. Различные компиляторы могут привести к разным классам и, следовательно, к другому декомпилированному источнику. –

ответ

0

В отношении этой части: Когда я компилирую PROJECT2, все файлы классов из project1 должны быть скопированы в project2

Это на самом деле не так, Maven компилирует два проекта на две отдельные банки, если проекты типа jar или копирует project1.jar в WEB-INF/lib проекта2, если проект 2 имеет тип WAR.

Разница между двумя файлами классов показывает, что версия project2 не имеет аспектов Roo, применяемых к ней, хотя она также была скомпилирована с AspectJ.

Попробуйте построить проект из командной строки, только закрыв все IDE и сравните две версии, чтобы увидеть, остается ли та же проблема. Возможно, ваша IDE компилирует класс с aspectJ, но без правильных аспектов Roo.

Также обратите внимание на это report на необходимость добавления плагина aspectj как в зависимом, так и в зависящем от проекта проекте, а также в документации по 3.7.2.2. Limitations на мультимодульной поддержке maven Roo.

+0

Я только что получил пакет debian, который описал сценарий. Я не могу воспроизвести его в текущих сборках. Хотя проблема решена, мы хотим знать точную причину, по которой эта проблема существует в первую очередь. – riship89

+0

, то это означает, что сборка версии в пакете debian не была выполнена с использованием maven или была выполнена с версией сборки, в которой была ошибка. попробуйте проверить, с кем сгенерировал пакет, и посмотреть, что они использовали для создания сборки и какую версию –

Смежные вопросы