我正在尝试使AspectJ编织工作在一个简单的Maven项目中,并且不确定它出了什么问题:当我使用“ mvn
exec:java”运行代码时,看不到预期的输出。
我确定代码可以正常工作,因为我在STS中尝试了相同的方法,在这里工作良好。我只是想让AspectJ在Maven项目中工作。
任何有关如何调试此类问题的提示将不胜感激。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.aop</groupId>
<artifactId>aop1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>aop1</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.3</version> <!-- specify your version -->
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</execution>
</executions>
<configuration>
<outxml>true</outxml>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<mainClass>com.aop.aop1.App</mainClass>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
外观文件与代码位于同一文件夹中:
package com.aop.aop1;
public aspect aspect {
pointcut secureAccess()
: execution(* *.foo(..));
before() : secureAccess() {
System.out.println("BEHOLD the power of AOP !!!");
}
}
Java文件:
package com.aop.aop1;
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
foo();
}
public static void foo() {
System.out.println(" IN FOO.");
}
}
您的配置存在几个问题:
Aspect
使用大写字母“ A” 命名,而不是aspect
保留关键字。</project>
标记。<pluginManagement>
部分,但没有单独的<plugins>
部分,即,您为插件提供了默认值,但实际上并未声明要使用它们。因此,您可以使用<plugins>
不带独立部分的内容,<pluginManagement>
也可以在其他<plugins>
部分中重新声明插件。aspectj-maven-plugin
需要<version>
。您忘记指定一个。aspectj-maven-plugin
还需要一个<complianceLevel>
配置。<outxml>
设置。仅在加载时编织时才需要。除此之外,如果您没有令人信服的理由使用较旧版本的Maven插件和依赖项(例如 JUnit 和 exec-maven-plugin),
则建议使用较新版本的Maven插件和依赖项。我还建议使用最新的AspectJ版本1.8.2,并且还指定在 Aspectj-maven-plugin
内部使用该版本。
工作 pom.xml中 最小的变化:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.aop</groupId>
<artifactId>aop1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>aop1</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.6</version>
<configuration>
<complianceLevel>1.7</complianceLevel>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<mainClass>com.aop.aop1.App</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
使用建议的更改 工作 pom.xml :
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.aop</groupId>
<artifactId>aop1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>AOP Sample</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<aspectj.version>1.8.2</aspectj.version>
<java.source-target.version>1.7</java.source-target.version>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.source-target.version}</source>
<target>${java.source-target.version}</target>
<!-- IMPORTANT -->
<useIncrementalCompilation>false</useIncrementalCompilation>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.6</version>
<configuration>
<showWeaveInfo>true</showWeaveInfo>
<source>${java.source-target.version}</source>
<target>${java.source-target.version}</target>
<Xlint>ignore</Xlint>
<complianceLevel>${java.source-target.version}</complianceLevel>
<encoding>UTF-8</encoding>
<verbose>true</verbose>
</configuration>
<executions>
<execution>
<!-- IMPORTANT -->
<phase>process-sources</phase>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3</version>
<configuration>
<mainClass>com.aop.aop1.App</mainClass>
</configuration>
</plugin>
<plugin>
<groupId>org.dstovall</groupId>
<artifactId>onejar-maven-plugin</artifactId>
<version>1.4.4</version>
<executions>
<execution>
<configuration>
<onejarVersion>0.96</onejarVersion>
<mainClass>com.aop.aop1.App</mainClass>
<attachToBuild>true</attachToBuild>
</configuration>
<goals>
<goal>one-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<pluginRepositories>
<pluginRepository>
<id>OneJAR googlecode.com</id>
<url>http://onejar-maven-plugin.googlecode.com/svn/mavenrepo</url>
</pluginRepository>
</pluginRepositories>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
<!--<scope>runtime</scope>-->
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
顺便说一句, onejar-maven-plugin
只是一个好东西,我喜欢用它来构建一个独立的超级JAR(又名胖JAR),其中包含运行该软件所需的一切,即您的类/方面以及AspectJ运行时。您可以使用以下命令运行程序
java -jar aop1-0.0.1-SNAPSHOT.one-jar.jar
输出应该类似于mvn exec:java
没有Maven的东西:
Hello World!
BEHOLD the power of AOP !!!
IN FOO.
我有一个项目,它不是spring应用程序。我正在尝试在其中使用AspectJ注释。注释类是从我的另一个jar中引用的。我在下面提到了POM的插件部分。我的构建成功了,但是Maven的控制台输出从来没有提到任何关于AspectJ插件的内容,而且当我运行我的项目时,注释也不起作用。 我几个小时来一直想弄清楚出了什么问题,但还是搞不清楚。 这是Jar中定义的两个依赖项,我试图将它用作方面库。 [DEBU
我有一个使用aspectJ进行审计maven项目。我在用Intellij想法。以下是我在pom文件中的插件配置: 我在Java应用程序中测试了这个方面和maven插件配置,它的工作很好。
问题内容: 这是我的带有SQL查询的PHP代码,但是输出与预期不符: 而且我得到这样的SQL查询: VALUES之后的第一个在哪里? 问题答案: 并具有相同的运算符优先级,但保持关联。第一次串联后的意思是: 该字符串已添加到您的密钥中,例如 因此,该字符串在该数字上下文中转换为整数并 消失 。要解决此问题,请在您的加法前后加上括号。
问题内容: 我正在遵循创建Maven插件的教程,并且无法运行mvn install而不会出现错误。该信息抱怨说,当注释应为我生成它们时,我没有所需的mojo描述符。我正在运行Maven 3.0.5,并使用intellij作为我的想法。这是我的主班: 这是我的pom.xml 注意: 我必须单独添加注释依赖项,因为主插件api不包含这些类。当我在项目上运行mvn install时,输出如下: 问题答案
问题内容: 1.背景 我的Maven项目中有很多模块和子模块,并且和一切正常。我也可以毫无问题地将其部署在服务器上。 我决定遵循此Maven命名转换,我正在进行一些测试,并使用一个适当的名称。 我为根工件定义的模式是,以及为模块和子模块创建的模式是: 公司任何工件任何模块1 公司-任何工件-任何模块2-任何子模块1 公司-任何工件-任何模块2-任何子模块2 的模式是: 公司任何人工制品任何模块1-
问题内容: 我使用的字体库字体很棒。当项目没有用grunt构建/丑化时,它可以工作。 但是,当我用粗鲁的方式构建项目时,它不起作用。我在控制台中收到此错误:… / fonts / fontawesome-webfont.woff?v = 4.0.3 404(未找到) 我已经将这个项目与约曼搭在一起。 这是我在index.html中的引用 有什么想法可能是错误的吗? 更新 我需要将文件夹/ bowe