我有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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.pac</groupId>
<artifactId>test</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>test</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.2</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.2</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>1.8.2</version>
</dependency>
</dependencies>
<!-- ... -->
</project>
课堂和方面:
public class Main
{
public int a = 10;
public static void main( String[] args )
{
Main instance = new Main();
System.out.println(instance.test());
}
public int test(){
return a;
}
}
public aspect TestAspect {
pointcut publicMethodExecuted(): execution(public !static * *(..));
int around() : publicMethodExecuted() {
System.out.println("Test string");
int original_return_value = proceed();
return original_return_value * 100;
}
}
但是mvn install生成没有aspectj
jar的jar文件。罐子看起来像:
root
|
|--META-INF
|
|--com
| |
| |--pac
| |
| |--Main.class
|
|--TestAspect.class
|
|--builddef.lst
为什么maven-jar-plugin
摆脱了aspectj
罐子?如何解决?我在运行时得到NoClassDefFoundException
:
Exception in thread "main" java.lang.NoClassDefFoundError: org/aspectj/lang/NoAspectBoundException
at com.badmitrii.Main.test(Main.java:1)
at com.badmitrii.Main.main(Main.java:11)
Caused by: java.lang.ClassNotFoundException: org.aspectj.lang.NoAspectBoundException
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 2 more
答案 0 :(得分:2)
你是什么意思它摆脱了罐子?他们曾经在最后的神器吗?因为根据你的pom我不知道是怎么回事。您需要使用maven-assembly-plugin创建一个包含所有依赖项的uberjar。如果罐子在某些时候已经打包,那么请提供更多信息,说明在依赖关系停止打包时所做的更改
您可以看到this answer了解有关如何创建uberjar的更多信息,但基本上,您需要将此添加到您的pom
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>