1、Maven引用本地jar包

  • 首先在resources目录下创建名为【lib】的文件夹,然后将本地jar包放入该文件夹下,如图

  •  然后在pom文件中引用该jar包
<dependency>
    <groupId>org.openqa.selenium</groupId>
    <artifactId>selenium-commons</artifactId>
    <scope>system</scope>
    <systemPath>${basedir}/src/main/resources/lib/selenium-commons-4.4.2.jar</systemPath>
    <version>4.2.2</version>
</dependency>

2、maven编译时找不到本地引用的jar包

在maven编译完成后,运行jar包的时候报错找不到本地引用的jar包,需要在pom文件中build中的【spring-boot-maven-plugin】中加一段配置增加配置:

<build>    
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
            <!--maven编译时将本地引用的jar包一起打包-->
            <includeSystemScope>true</includeSystemScope>
        </configuration>
    </plugin>
</build> 

同步下maven后重新编译发现问题解决。


3、Maven将本地jar包添加到本地仓库【可被pom文件调用】

  • 首先确保本地存在maven环境,然后进入settings文件查看setting配置本地仓库路径,入下图所示:

  • 然后将本地jar包放到一个目录下

  • 在文件路径输入cmd直接进入cmd控制台。 
  • 指定jar包在maven仓库的groupId,artifactId,version等信息:
<dependency>
    <groupId>com.bw</groupId>
    <artifactId>mqtt-producer</artifactId>
    <version>1.1.2</version>
</dependency>
  • 接着在cmd执行maven命令:
mvn install:install-file "-Dfile=mqtt-producer-1.1.2.jar" "-DgroupId=com.bw" "-DartifactId=mqtt-producer" "-Dversion=1.1.2" "-Dpackaging=jar"

看到SUCCESS则表示上传成功。

  • 最后到 setting配置本地仓库路径下查看仓库是否添加成功

 上图可以看到添加成功。最后pom文件刷新可看到本地仓库引用成功。


 4、maven编译后将项目中用到的jar包拷贝到target某文件夹下

在pom中添加如下配置

<build>
    <!--拷贝依赖到jar外面的lib目录-->
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
            <execution>
                <id>copy-lib</id>
                <phase>package</phase>
                <goals>
                    <goal>copy-dependencies</goal>
                </goals>
                <configuration>
                    <outputDirectory>target/lib</outputDirectory>
                    <excludeTransitive>false</excludeTransitive>
                    <stripVersion>false</stripVersion>
                    <includeScope>runtime</includeScope>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
            <archive>
                <!-- 生成的jar中,不要包含pom.xml和pom.properties这两个文件 -->
                <addMavenDescriptor>false</addMavenDescriptor>
                <manifest>
                    <!-- 是否要把第三方jar加入到类构建路径 -->
                    <addClasspath>true</addClasspath>
                    <!-- 外部依赖jar包的最终位置 -->
                    <classpathPrefix>lib/</classpathPrefix>
                    <!-- 项目启动类 -->
                    <mainClass>com.saas.reptile.ReptileApplicatio</mainClass>
                </manifest>
            </archive>
        </configuration>
    </plugin>
</build>

maven编译后可以在target中看到生成的jar包,如下图:


5、maven编译打包时不编译项目中的依赖包

需要在pom文件中build中的【spring-boot-maven-plugin】中增加配置:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <layout>ZIP</layout>
        <!-- 注释后和依赖包一起打包 取消注释则不打包依赖-->
        <includes>
            <include>
                <groupId>nothing</groupId>
                <artifactId>nothing</artifactId>
            </include>
        </includes>
    </configuration>
</plugin>

再配合上述的将项目中用到的jar包拷贝到target某文件夹下的【build】配置,将依赖包从项目jar包中完全抽离出来;

最后发布jar包的时候在jar包同级目录创建名为【lib】的文件夹,作为jar包外部依赖,如下图所示


6、maven编译打war包

  • 首先在启动类中继承SpringBootServletInitializer类,并重写SpringApplicationBuilder的configure方法。
@SpringBootApplication
@ServletComponentScan
@EnableScheduling
public class DemoApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder springApplicationBuilder) {
        return springApplicationBuilder.sources(DemoApplication.class);
    }
 
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
  • 其次改动pom文件

首先将<packaging>改成【war】;

然后排除【spring-boot-starter-web】依赖包中的tomcat依赖;

最后加入【javax.servlet】依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>

    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <scope>provided</scope>
</dependency>
  • 最后修改build
<build>
    <!-- 打包后的服务名称 -->
    <finalName>dsm</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <!--可以不用添加web.xml-->
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.1.0</version>
        </plugin>
        <plugin>
            <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-deploy-plugin -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-deploy-plugin</artifactId>
            <!--deploy 时忽略 model-->
            <configuration>
                <skip>true</skip>
            </configuration>
        </plugin>
    </plugins>
</build>

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐