【问题标题】:Maven and AspectJ do not package wellMaven 和 AspectJ 打包不好
【发布时间】:2015-03-31 10:39:42
【问题描述】:

欢迎,

我在打包 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

有什么问题?

【问题讨论】:

    标签: java maven aspectj aspectj-maven-plugin


    【解决方案1】:

    问题在于手动运行程序时,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>
    

    然后你可以忘记将所有依赖项放在类路径上并使用:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-23
      • 1970-01-01
      • 2014-03-08
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多