Maven и AspectJ плохо упаковывают

1

Добро пожаловать,

У меня проблема с упаковкой 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

В чем проблема?

Теги:
maven
pom.xml
aspectj

1 ответ

0

Проблема заключается в том, что 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню