2011-11-03 34 views
8

Tôi đang phát triển một ứng dụng trong kiến ​​trúc ddd sử dụng tính năng Spring LoadTimeWeaving. Vấn đề là tôi có thể chạy các bài kiểm tra Junit của tôi bằng cách sử dụng nhật thực nhưng không phải thông qua Maven. Tôi đã thử tất cả các tùy chọn được đưa ra trên các trang web khác nhau nhưng nó chỉ đơn giản là không làm việc. Tôi nhận được ngoại lệ sau:Chạy thử nghiệm đơn vị sử dụng Maven trong môi trường mùa xuân LTW

Gây ra bởi: org.springframework.beans.factory.BeanCreationException: Lỗi tạo bean có tên 'loadTimeWeaver': Khởi tạo bean không thành công; ngoại lệ lồng nhau là java.lang.IllegalStateException: ClassLoader [sun.misc.Launcher $ AppClassLoader] KHÔNG cung cấp phương thức 'addTransformer (ClassFileTransformer)'. Chỉ định một LoadTimeWeaver tùy chỉnh hoặc khởi động máy ảo Java của bạn với tác nhân của Spring: -javaagent: org.springframework.instrument.jar

Tôi đã thêm jar công cụ như một phần của plugin argLine vào plugin chắc chắn. Sau đây là các tạo phẩm mã của tôi. Xin vui lòng cho tôi biết nơi tôi đang đi sai hoặc nếu có bất kỳ giải pháp khác.

Tôi đang sử dụng Eclipse Indigo Phát triển, Maven 3.0 trên Mac OSX

pom.xml (rút ngắn chỉ chi tiết quan trọng)

<dependencies> 
    <!-- Spring Dependencies --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aop</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context-support</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-tx</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-jdbc</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aspects</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 


    <!-- Spring Security Dependencies --> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-core</artifactId> 
     <version>${spring.security-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-config</artifactId> 
     <version>${spring.security-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-web</artifactId> 
     <version>${spring.security-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-taglibs</artifactId> 
     <version>${spring.security-version}</version> 
    </dependency> 

    <!-- AspectJ 
    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjrt</artifactId> 
     <version>${org.aspectj-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjweaver</artifactId> 
     <version>${org.aspectj-version}</version> 
    </dependency>--> 

    <!-- Persistence Dependencies --> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.18</version> 
    </dependency> 
    <dependency> 
     <groupId>c3p0</groupId> 
     <artifactId>c3p0</artifactId> 
     <version>0.9.1.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate.java-persistence</groupId> 
     <artifactId>jpa-api</artifactId> 
     <version>2.0-cr-1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>3.6.7.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>4.2.0.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>com.googlecode.genericdao</groupId> 
     <artifactId>dao</artifactId> 
     <version>1.0.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.googlecode.genericdao</groupId> 
     <artifactId>search-jpa-hibernate</artifactId> 
     <version>1.0.0</version> 
    </dependency> 

    <!-- Web Dependencies --> 
    <dependency> 
     <groupId>opensymphony</groupId> 
     <artifactId>sitemesh</artifactId> 
     <version>2.4.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.commons</groupId> 
     <artifactId>commons-lang3</artifactId> 
     <version>3.0.1</version> 
    </dependency> 

    <!-- Testing Dependencies --> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-instrument</artifactId> 
     <version>3.1.0.M2</version> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 
<build> 
    <finalName>jtemplate</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-site-plugin</artifactId> 
      <version>3.0</version> 
      <configuration> 
       <reportPlugins> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-project-info-reports-plugin</artifactId> 
         <version>2.2</version> 
         <reports> 
          <report>index</report> 
          <report>project-team</report> 
          <report>license</report> 
          <report>mailing-list</report> 
          <report>dependencies</report> 
          <report>dependency-convergence</report> 
          <report>plugin-management</report> 
          <report>cim</report> 
          <report>issue-tracking</report> 
          <report>scm</report> 
          <report>summary</report> 
         </reports> 
        </plugin> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-surefire-report-plugin</artifactId> 
         <version>2.10</version> 
         <configuration> 
          <forkMode>pertest</forkMode> 
          <argLine>-javaagent:/Users/vishals/.m2/repository/org/springframework/spring-instrument/3.1.0.M2/spring-instrument-3.1.0.M2.jar</argLine> 
          <useSystemClassloader>true</useSystemClassloader> 
         </configuration> 
        </plugin> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-javadoc-plugin</artifactId> 
         <version>2.7</version> 
        </plugin> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-checkstyle-plugin</artifactId> 
         <version>2.6</version> 
         <configuration> 
          <configLocation>${basedir}/src/main/resources/mkcl-egov.xml</configLocation> 
         </configuration> 
         <!-- <configuration> Adopt config location to your needs, or remove 
          configuration entry completly to use default version. <configLocation>http://stud.hs-heilbronn.de/~nischmid/development/checkstyle-config.xml</configLocation> 
          </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> 
          <artifactId>findbugs-maven-plugin</artifactId> <version>2.3.1</version> <configuration> 
          <argLine>-Xmx256m</argLine> <argLine>-XX:MaxPermSize=256m</argLine> </configuration> --> 
         <!-- Usually findbugs needs a lot of memory, change these values if 
          needed. --> 
        </plugin> 
        <plugin> 
         <groupId>org.codehaus.mojo</groupId> 
         <artifactId>jdepend-maven-plugin</artifactId> 
         <version>2.0-beta-2</version> 
        </plugin> 
        <plugin> 
         <groupId>org.codehaus.mojo</groupId> 
         <artifactId>cobertura-maven-plugin</artifactId> 
         <version>2.4</version> 
        </plugin> 
        <plugin> 
         <groupId>org.codehaus.mojo</groupId> 
         <artifactId>taglist-maven-plugin</artifactId> 
         <version>2.4</version> 
        </plugin> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-jxr-plugin</artifactId> 
         <version>2.1</version> 
        </plugin> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-pmd-plugin</artifactId> 
         <version>2.5</version> 
         <configuration> 
          <linkXref>true</linkXref> 
          <minimumTokens>100</minimumTokens> 
          <minimumPriority>3</minimumPriority> 
          <!-- Change minimum priority to see more or less messages --> 
          <targetJdk>1.6</targetJdk> 
         </configuration> 
        </plugin> 
       </reportPlugins> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

springContext.xml (của nó có thẻ sau để bật tính năng LTW)

<context:load-time-weaver/> 
+0

Hmm, không phụ thuộc cglib ... –

Trả lời

12

bạn cần bao gồm một đại lý spring-instrument.jar như:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.4</version> 
    <configuration> 
      <forkMode>once</forkMode> 
      <argLine> 
       -javaagent:"${settings.localRepository}/org/springframework/spring-instrument/${spring.framework.version}/spring-instrument-${spring.framework.version}.jar" 
     </argLine> 
      <useSystemClassloader>true</useSystemClassloader> 
    </configuration> 
</plugin> 

(thay thế $ {spring.framework.version} và $ {} settings.localRepository với các giá trị của bạn)

và tất nhiên một plugin AspecJ Maven như:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>aspectj-maven-plugin</artifactId> 
    <version>1.3</version> 
    <executions> 
     <execution> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration>      
      <goals> 
       <goal>compile</goal>  <!-- use this goal to weave all your main classes --> 
       <goal>test-compile</goal> <!-- use this goal to weave all your test classes --> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Đối AspectJ để làm việc, bạn cũng sẽ cần thêm một sự phụ thuộc aspectjrt:

<dependency> 
    <groupId>org.aspectj</groupId> 
    <artifactId>aspectjrt</artifactId> 
    <version>${aspectjrt.version}</version> 
</dependency> 

Dưới đây là một ví dụ đầy đủ về cách run AspectJ tests with Maven

+0

Hi Cảm ơn, vấn đề này được giải quyết. Tôi đã vô tình thực hiện cài đặt trên plugin báo cáo chắc chắn và không bao gồm plugin chắc chắn. Sau khi bao gồm tôi có thể chạy tất cả các bài kiểm tra của tôi mà không có bất kỳ vấn đề. –

Các vấn đề liên quan