2012-11-13 63 views
1

我配置了使用maven plugin aspectj-maven-plugin编织第三方jar。部分编译时使用maven编织第三方jar

  <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>aspectj-maven-plugin</artifactId> 
       <version>1.4</version> 
       <dependencies> 
        <dependency> 
         <groupId>org.aspectj</groupId> 
         <artifactId>aspectjrt</artifactId> 
         <version>${aspectj.version}</version> 
        </dependency> 
        <dependency> 
         <groupId>org.aspectj</groupId> 
         <artifactId>aspectjtools</artifactId> 
         <version>${aspectj.version}</version> 
        </dependency> 
       </dependencies> 
       <executions> 
        <execution> 
         <goals> 
          <goal>compile</goal> 
          <goal>test-compile</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <!--<proceedOnError>true</proceedOnError>--> 
        <weaveDependencies> 
         <weaveDependency> 
          <groupId>org.quartz-scheduler</groupId> 
          <artifactId>quartz</artifactId> 
         </weaveDependency> 
        </weaveDependencies> 
        <aspectLibraries> 
         <aspectLibrary> 
          <groupId>org.springframework</groupId> 
          <artifactId>spring-aspects</artifactId> 
         </aspectLibrary> 
        </aspectLibraries> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 

没有与缺少的Java类的引用的一个问题。 Quartz jar与JMS有一些集成,但我的应用程序不使用JMS,因此这些quartz文件从不加载。

我发现了一个与proceedOnError = true的拐杖,但我认为由于错误春天注入方面注释类停止工作。

shade-maven-plugin在这里不适合,因为它可能仅由包阶段触发,而aspectj将在编译阶段启动。

[INFO] --- aspectj-maven-plugin:1.4:compile (default) @ aspectj-demo --- 
[ERROR] can't determine implemented interfaces of missing type javax.servlet.ServletContextListener 
when processing declare parents org.quartz.ee.servlet.QuartzInitializerListener 
when processing type mungers 
when weaving 
when batch building BuildConfig[null] #Files=5 AopXmls=#0 
[Xlint:cantFindType] 
[ERROR] can't determine implemented interfaces of missing type javax.servlet.http.HttpServlet 
when processing declare parents org.quartz.ee.servlet.QuartzInitializerServlet 
when processing type mungers 
when weaving 
when batch building BuildConfig[null] #Files=5 AopXmls=#0 
[Xlint:cantFindType] 

回答

1

任何的Maven在weaveDependencies坐标列出必须被提及作为一个正常的依赖性。根据下载页面上,你将需要有下<构建>定义了如下依赖:

<dependency> 
    <groupId>org.quartz-scheduler</groupId> 
    <artifactId>quartz</artifactId> 
    <version>2.1.6</version> 
</dependency> 
<dependency> 
    <groupId>org.quartz-scheduler</groupId> 
    <artifactId>quartz-oracle</artifactId> 
    <version>2.1.6</version> 
</dependency> 
    <dependency> 
    <groupId>org.quartz-scheduler</groupId> 
    <artifactId>quartz-weblogic</artifactId> 
    <version>2.1.6</version> 
</dependency> 
<dependency> 
    <groupId>org.quartz-scheduler</groupId> 
    <artifactId>quartz-jboss</artifactId> 
    <version>2.1.6</version> 
</dependency> 

然后下了AspectJ的Maven的插件插件配置部分,你可以参考包含的JAR文件您要编织的方面:

<weaveDependencies> 
    <weaveDependency> 
     <groupId>org.quartz-scheduler</groupId> 
     <artifactId>quartz</artifactId> 
    </weaveDependency> 
</weaveDependencies> 

您可能还需要使用aspectj-maven-plugin的1.2版本。假设1.4中有一个关于“声明父母”的错误(但不确定是否已被修复),并且1.3的早期版本遭受了被称为MASPECTJ-90的错误。

相关问题