idea 打包jar包,jar包都是class没有lib和jar包
时间: 2025-05-21 15:30:29 浏览: 30
### 如何在 IntelliJ IDEA 中正确打包包含依赖的 JAR 包
在 IntelliJ IDEA 中,可以通过 Maven 插件或手动配置的方式创建一个包含所有依赖项的 JAR 文件。以下是具体方法:
#### 方法一:通过 Maven 配置插件实现
Maven 提供了一些插件用于处理项目的构建和打包过程。为了生成包含依赖的 JAR 文件,可以使用 `maven-assembly-plugin` 或者 `spring-boot-maven-plugin`。
##### 使用 `maven-assembly-plugin`
可以在 `pom.xml` 文件中添加如下配置:
```xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.example.MainApp</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
```
此配置会生成两个 JAR 文件:一个是普通的 JAR 文件,另一个是以 `-with-dependencies` 结尾的 JAR 文件,其中包含了所有的依赖项[^3]。
##### 使用 `spring-boot-maven-plugin`
如果项目基于 Spring Boot,则推荐使用该插件来打包应用程序:
```xml
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.0</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
```
Spring Boot 的默认行为是将所有依赖嵌入到最终的 JAR 文件中,并设置正确的 `Main-Class` 和 `Start-Class` 属性[^3]。
#### 方法二:通过 IntelliJ IDEA 自动化工具实现
除了借助 Maven 外,还可以直接利用 IntelliJ IDEA 的功能完成这一目标。
1. **打开 Project Structure 对话框**
- 菜单栏选择 `File -> Project Structure...`。
2. **配置 Artifacts**
- 在左侧列表中选择 `Artifacts`。
- 点击右上角的加号 (`+`) 并选择 `JAR -> From modules with dependencies`。
- 设置主类(即程序入口),并指定输出目录。
3. **生成 JAR 文件**
- 转至菜单栏中的 `Build -> Build Artifacts`。
- 选择刚刚定义好的 Artifact 名称,点击 `Build` 即可生成所需的 JAR 文件[^2]。
需要注意的是,在某些情况下可能会遇到资源加载失败的问题,比如尝试调用 `Test.class.getClassLoader().getResource("")` 返回 null 值的情况。这是因为运行环境发生了变化,建议调整代码逻辑以适应不同场景下的路径解析需求[^4]。
```python
import os.path
def get_resource_path(relative_path):
base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
return os.path.join(base_path, relative_path)
print(get_resource_path("config.properties"))
```
以上脚本展示了如何安全地定位应用内部资源配置文件的位置而不受外部因素干扰。
阅读全文
相关推荐


















