2015-05-15 2 views
2

У меня есть pom.xmlMaven не incude зависимостей в банку

<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; 
    } 
} 

Но МВН установки производят Jar-файл без aspectj банок. Баночка выглядит следующим образом:

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 
+3

В баночках нет зависимостей только кода, который вы сделали в своем пакете. Если у вас нет других зависимостей, вы должны использовать [maven-assembly-plugin] (http://maven.apache.org/plugins/maven-assembly-plugin/) или [maven-shade-plugin] (http://maven.apache.org/plugins/maven-shade-plugin/). – khmarbaise

+0

@khmarbaise Может быть, вы можете предоставить asnwer? – user3663882

+0

Использовать теневой плагин – user489041

ответ

2

Что вы имеете в виду, что избавились от банок? были ли они когда-либо в финальном артефакте? Потому что, основываясь на вашем помпе, я не понимаю, как это было. Вам нужно использовать 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> 
Смежные вопросы