不使用 Maven、Gradle 等工具,如何打一个有依赖的JAR包?比如我的程序用到Spring框架,将它打JAR包时需要把Spring的包一起打进去,如何做到?要求JAR包形式的程序依然能运行。并给出详细步骤,包括每个步骤的命令、文件内容等。
时间: 2023-06-04 17:06:37 浏览: 195
好的,你的问题是关于如何打无依赖、有依赖的JAR包的。首先,我们需要明确几个概念。
- 无依赖JAR包:指JAR包中的所有依赖(如Spring框架)都已经被打包进JAR包中,无需外部依赖。
- 有依赖JAR包:指JAR包中使用到的依赖(如Spring框架)还未被打包进JAR包中,需要在运行时从外部加载。
接下来,我为你列出两种打包方式。
1. 使用jar命令行工具打JAR包
假设我们的程序入口类是com.example.Main,依赖于Spring框架,程序结构如下:
```
./
├── com/
│ └── example/
│ ├── Main.class
└── org/
└── springframework/
├── ... // Spring框架相关文件
```
我们先将程序编译成class文件:
```
$ javac -sourcepath . -d bin com/example/Main.java
```
然后创建一个Manifest文件,指定程序入口类和依赖包的路径(注意换行符):
```
Manifest-Version: 1.0
Main-Class: com.example.Main
Class-Path: org/springframework/
```
接着,使用jar命令行工具打成有依赖的JAR包:
```
$ jar cvfm app.jar Manifest.txt -C ./bin .
```
这个命令的参数含义如下:
- c:创建新的JAR包
- v:打印详细信息
- f:指定JAR包文件名
- m:指定Manifest文件
- C:指定要压缩的文件所在的目录(注意末尾的.)
打包完成后,可以使用如下命令运行程序:
```
$ java -jar app.jar
```
此种方式生成的是有依赖的JAR包,可以正常运行,但是带有依赖包以及Manifest文件。
2. 使用maven-assembly-plugin 打成无依赖的JAR包
我们可以使用maven-assembly-plugin插件生成无依赖的JAR包。在pom.xml文件中添加以下依赖:
```xml
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
```
这是一个完整的pom.xml文件内容。注意要将artifacts加入到configuration内。
然后在命令行输入以下命令直接打包
```
$ mvn clean compile assembly:single
```
此种方式生成的是无依赖Jar包。
以上是两种打包方式,具体可以根据自己的需求选择。希望能够帮到你,如果还有其他问题,请继续问我。
阅读全文