Maven并没有在jar中加入依赖关系

时间:2015-05-15 17:32:43

标签: java maven jar

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

1 个答案:

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