2011-11-03 53 views
8

我正在使用Spring LoadTimeWeaving功能在ddd體系結構中開發應用程序。問題是我可以使用eclipse運行我的Junit測試,但不能通過Maven運行。我嘗試了各種網站上提供的所有選項,但它根本無法正常工作。我收到以下例外情況:在Spring LTW環境中使用Maven運行單元測試

原因:org.springframework.beans.factory.BeanCreationException:創建名爲'loadTimeWeaver'的bean時出錯:Bean初始化失敗;嵌套異常是java.lang.IllegalStateException:ClassLoader [sun.misc.Launcher $ AppClassLoader]不提供'addTransformer(ClassFileTransformer)'方法。用Spring的代理指定一個定製的LoadTimeWeaver或啓動你的Java虛擬機:-javaagent:org.springframework.instrument.jar

我已經將instrument jar作爲argLine的一部分添加到surefire插件中。以下是我的代碼工件。請讓我知道我出錯的地方或者是否有其他解決方案。

我使用Eclipse靛藍髮展,Maven的3.0 Mac OSX上

的pom.xml(縮短唯一重要的細節)

<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(其具有用於啓用LTW功能的以下標籤)

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

嗯,沒有CGLIB的依賴... –

回答

12

您需要包括一個spring-instrument.jar劑爲:

<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> 

(替換$ {spring.framework.version}和$ {} settings.localRepository與你的價值觀)

,當然還有一個AspecJ Maven插件爲:

<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> 

對於AspectJ的工作,你還需要增加一個aspectjrt依賴性:

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

這裏就介紹如何run AspectJ tests with Maven

+0

嗨謝謝,這個問題就解決了一個完整的例子。我不小心在surefire-report-plugin上做了設置,並沒有包含surefire-plugin。在這個包含之後,我可以運行我所有的測試而沒有任何問題 –

相關問題