【问题标题】:How to get AspectJ and maven working on a War project?如何让 AspectJ 和 maven 参与 War 项目?
【发布时间】:2014-05-31 08:41:38
【问题描述】:

我有一个使用标准 Maven 战争布局编译为 webapp 的 Maven 项目。 我正在尝试向同一个项目添加方面,但是当部署为对 Tomcat 的战争时,这些方面不会被触发。如果我将项目部署为 jar,这些方面就会发挥作用。

这是我的 pom.xml 的样子

```

<groupId>in.sheki</groupId>
<artifactId>abc-service</artifactId>
<packaging>war</packaging>
<name>abc-service</name>

<properties>
    <aspectj.version>1.6.12</aspectj.version>
</properties>

<build>
    <finalName>abc-service</finalName>

    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <version>1.4</version>
            <configuration>
                <complianceLevel>1.6</complianceLevel>
            </configuration>
            <executions>
                <execution>
                    <phase>process-sources</phase>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
   <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>${aspectj.version}</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>${aspectj.version}</version>
    </dependency> 
   ....
 </dependencies>
 </project>

```

方面在项目的其中一个包中定义为带有@Aspect 注释的JavaClass。

我做错了什么?

要创建一个战争,我做mvn clean install 并将战争移动到 webapps 目录。 为了创建 Jar,我使用带有 Main Class 的程序集插件,这不会启动 HTTP 服务,但会启动我代码中的其他进程。

【问题讨论】:

  • 当你部署到Tomcat时,你是怎么做的呢?您是否运行mvn install 然后将target/..war 复制到webapps?以及如何“将项目部署为 jar”?
  • 在问题本身中回答了您的疑问。
  • 一般建议:尝试运行mvn -X clean install 以查看在战争构建期间会发生什么。看看aspectj-maven-plugin 在做什么(也许在这里发布相关的 maven 日志)。

标签: java maven aop aspectj war


【解决方案1】:

确保您有一个名为 war.bundle 的属性

是的

看看http://maven.apache.org/maven-1.x/plugins/aspectj/

如果您在没有 spring 的情况下运行,那么您可能需要 aop.xml,如中所述 http://ganeshghag.blogspot.in/2012/10/demystifying-aop-getting-started-with.html

【讨论】:

    【解决方案2】:

    部署在 Tomcat(或据我所知的任何其他 Web 容器)上的 Wars 通过重新选择过程调用它们的方法,并且这种方式不会触发“call()”切入点。 尝试将您的“call()”切换为“execution()”,在 Jonas 上为我工作,maven 通过货物处理部署。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-13
      • 2014-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多