maven项目打包后如何保留注释
项目场景:
maven项目打成jar包后没有注释了
原因分析:
Maven打包后class文件中没有注释的原因主要是因为编译过程中注释信息不会被包含在class文件中。 在Java编译过程中,注释信息不会被包含在生成的class文件中,这是因为注释信息主要用于开发时的参考,而不是运行时需要的信息。编译器的设计就是将源代码中的注释信息去除,只保留必要的编译后的代码。
解决方案:
如何在Maven项目中保留和使用注释:
- 生成源码jar包:可以通过使用Maven的maven-source-plugin插件来生成包含源代码的jar包。这样,开发者可以通过IDE或其他工具查看源代码时,能够看到原始的注释信息。
- 生成Javadoc jar包:使用maven-javadoc-plugin插件可以生成包含Javadoc的jar包。虽然这不会直接在class文件中保留注释,但可以在开发时提供文档支持,帮助理解代码。
在pom文件里 加上
<build>
<plugins>
<!-- 配置jar插件,确保javadoc JAR能和主代码JAR一起打包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<!--生成doc jar包-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!--生成源码jar包-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
测试:
比如有一个项目spring-boot-test,有个测试类并且包含注释:
package com.test.utils;
/**
* 测试工具类
*/
public class TestUtil {
/**
* 打印内容
* @param text 输入的内容
* @return 内容
*/
public static String print(String text){
//方法内注释
return text;
}
}
pom
<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.test</groupId>
<artifactId>spring-boot-test</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath />
</parent>
<properties>
<!-- 跳过测试 -->
<skipTests>true</skipTests>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 配置jar插件,确保javadoc JAR能和主代码JAR一起打包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<!--生成doc jar包-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!--生成源码jar包-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
这时候使用idea打包,点击package或者install
package 和 install 打包的区别:
- package :只会在项目本地的 target 目录中生成jar包,而不会将它们安装到本地maven仓库中。
- install:install 阶段的作用是在 package 阶段的基础上,再将打包好的构件安装到本地 Maven 仓库中(默认路径是 ~/.m2/repository)。所以,mvn install 包含了 mvn package 所做的所有事情,但还额外将构件安装到本地仓库,确保其他项目可以依赖和使用它。
我们因为要测试使用这个jar包,所以用install打包,我们会发现maven仓库下生了jar、javadoc、sources
这时候其他maven项目就可以引用这个jar包使用
<dependency>
<groupId>com.test</groupId>
<artifactId>spring-boot-test</artifactId>
<version>0.0.1</version>
</dependency>
然后使用里面的方法
package com.test;
import com.test.utils.TestUtil;
public class TestPrint {
public static void main(String[] args) {
System.out.println(TestUtil.print("测试"));;
}
}
鼠标悬停可以看到注释
点击方法内可以查看源码