Maven和AspectJ不能很好地包装

问题描述:

欢迎,Maven和AspectJ不能很好地包装

我有包装aspectj程序的问题。在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 

,以避免这一点的唯一方法是使用一个插件像一瓶(依赖被装入应用程序JAR和加载witgh一个特殊的类加载器)或Maven阴影(依赖被解压到你的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> 

然后,你可以忘掉把所有依赖的类路径和使用:

java -jar target\<my-package>.one-jar.jar