我不得不恢复一个大约一年半以前有效的旧项目,但是现在当我这样做时:
mvn clean install
无论是在命令行还是通过eclipse,它都能正常编译,但不会在清单 AND 中添加主类。我确实有正确的指令。
我正在使用:
这是pom.xml的缩写版本:
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.a.b.c</groupId>
<artifactId>JarNameHere</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<log4j.version>2.4</log4j.version>
<http.client.version>4.5.2</http.client.version>
<maven.compiler.source>10</maven.compiler.source>
<maven.compiler.target>10</maven.compiler.target>
</properties>
<dependencies>
<!-- DEPENDENCIES HERE, BUT REMOVED TO MAKE MORE READABLE -->
...
</dependencies>
<build>
<pluginManagement>
<plugins>
<!-- Maven Assembly Plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<!-- get all project dependencies -->
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<!-- MainClass in mainfest make a executable jar -->
<archive>
<manifest>
<mainClass>com.a.b.c.MainClass</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- AspectJ configuration -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.11</version>
<configuration>
<complianceLevel>1.11</complianceLevel>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- -->
</plugins>
</pluginManagement>
</build>
</project>
答案 0 :(得分:1)
您犯了一个经典的初学者错误:您假设在pluginManagement
部分中配置的插件将在构建期间自动使用。实际上,他们不会。 AspectJ Maven和Assembly都不会像这样运行,因此,在target
目录中当然不会有任何依赖的JAR。
您也需要将插件显式添加到plugins
部分,至少通过组ID和名称(而不是那里的版本或配置)来引用它们,除非您想覆盖{{ 1}})。
此外,您会注意到AspectJ Maven仍然配置错误,并且一旦激活插件,构建就会失败。但这不在您的问题范围内,因此我在这里不做详细说明。
PS:我将您的设置复制到我自己的POM中,对其进行了修复,并且可以确认AspectJ插件具有正确的设置后,Assembly插件会按预期完成其工作,包括使用正确的主类进行清单化。 >
更新:因此,您只提供一个POM片段,而无需编译和运行任何代码,但是您想查看我的完整POM。我觉得有些奇怪,因为实际上您应该提供一个list-style-type
property。但是无论如何,这就是我所拥有的:我只是将您的Assembly Plugin合并到我自己的一个项目中,在该项目中我通常使用One-JAR插件(构建可执行的JAR JAR),用您的插件替换我的插件,并检查是否可以运行可通过pluginManagement
执行。测试成功。但是,我仍在使用JDK 8,因为这个问题我没有升级整个构建系统。对于该示例,我还去除了除AspectJ运行时以外的所有其他依赖项。
java -jar ...
答案 1 :(得分:0)
我毫不怀疑@kriegaex给出的答案将在Java 9之前运行,因为我的旧pom.xml在Java 8上已经工作了多年。事实证明我没有提供足够的信息我的问题中的“强”正确回答了这个问题。是我从Java 8到Java 10的升级弄乱了AspectJ集成,因此在Maven创建jar之前失败了。
注意:我将继续对此进行完善,因为使用pluginManagement标签可能会更好。不幸的是,除了简单的依赖项标签之外,我没有经常修改pom.xml。因此,我在短时期内通过艰苦的工作而变得良好,但多年来却从未碰过/进行重大更改,而忘记了上一次所学到的东西。
我在这里找到了解决方法:Maven AspectJ plugin fails to build with Java 9 due to missing tools.jar
实际解决方案: 在我的pom.xml中更改几行即可达到目的:
<groupId>com.github.m50d</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.11.1</version>
<!--
THESE WERE THE ORIGINAL LINES
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.11</version>
-->
我想出了在命令行上执行此操作的方法:
mvn -X clean install
即使是最新版本的AspectJ仍在寻找tools.jar文件:
<properties>
<!-- Other lines removed for brevity -->
<aspect.version>1.9.1</aspect.version>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.machinepublishers/jbrowserdriver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspect.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${aspect.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspect.version}</version>
</dependency>
<!-- OTHER DEPENDENCIES REMOVED FOR BREVITY -->
</dependencies>
<build>
<plugins>
<!-- Maven Assembly Plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<!-- get all project dependencies -->
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<!-- MainClass in mainfest make a executable jar -->
<archive>
<manifest>
<mainClass>a.b.c.Foo</mainClass>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
<!-- AspectJ configuration -->
<plugin>
<groupId>com.github.m50d</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.11.1</version>
<!--
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.11</version>
-->
<configuration>
<!-- MUST use 10, NOT 1.10 or ajc breaks -->
<complianceLevel>10</complianceLevel>
<source>10</source>
<target>10</target>
<showWeaveInfo>true</showWeaveInfo>
<verbose>true</verbose>
<Xlint>ignore</Xlint>
<encoding>UTF-8</encoding>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal> <!-- use this goal to weave all your main classes -->
<goal>test-compile</goal> <!-- use this goal to weave all your test classes -->
</goals>
</execution>
</executions>
</plugin>
<!-- -->
</plugins>
</build>