Добро пожаловать,
У меня проблема с упаковкой aspectj program. Используя этот кусок кода в pom.xml:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/log4j.properties</exclude>
</excludes>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.mkyong.core.utils.App</mainClass>
<classpathPrefix>dependency-jars/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.7</version>
<configuration>
<ajdtBuildDefFile>build-1-5.ajproperties</ajdtBuildDefFile>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- OTHER PLUGINS -->
</plugins>
</build>
Использование этих команд на консоли:
mvn aspectj:compile
mvn exec:java
Хорошо работать со всеми аспектами. Но выполните этот маршрут:
mvn package
java -jar target\<my-package>.jar
Не работает. В исключении содержится информация о:
Caused by: java.lang.ClassNotFoundException: org.aspectj.lang.Signature
В чем проблема?
Проблема заключается в том, что AspectJ Runtime aspectjrt.jar не находится в вашем пути к классу при запуске программы вручную. Вы должны запустить программу следующим образом:
java -cp path\to\aspectjrt.jar -jar target\<my-package>.jar
Единственный способ избежать этого - использовать плагин как One-Jar (зависимости упаковываются в JAR приложения и загружаются с помощью специального загрузчика классов) или Maven Shade (зависимости распаковываются в ваш JAR).
<plugin>
<groupId>org.dstovall</groupId>
<artifactId>onejar-maven-plugin</artifactId>
<version>1.4.4</version>
<executions>
<execution>
<goals>
<goal>one-jar</goal>
</goals>
</execution>
</executions>
<configuration>
<onejarVersion>0.96</onejarVersion>
<mainClass>de.scrum_master.app.FooBar</mainClass>
<attachToBuild>true</attachToBuild>
</configuration>
</plugin>
<!-- (...) -->
<pluginRepositories>
<pluginRepository>
<id>OneJAR googlecode.com</id>
<url>http://onejar-maven-plugin.googlecode.com/svn/mavenrepo</url>
</pluginRepository>
</pluginRepositories>
Тогда вы можете просто забыть о включении всех зависимостей в classpath и использовать:
java -jar target\<my-package>.one-jar.jar