在本地运行,动态编译执行是没有问题的,可是部署到服务器上后报ClassNotFoundException找不到类,有可能是因为本地环境和服务器环境的classpath不一样。
解决办法:打包的时候依赖包不打进jar包里,单独输出
修改pom.xml打包配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<!-- 是否要把第三方jar加入到类构建路径 -->
<addClasspath>true</addClasspath>
<!-- 外部依赖jar包的最终位置 -->
<classpathPrefix>lib/</classpathPrefix>
<!--指定jar程序入口-->
<mainClass>com.ifox.admin.AdminApplication</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- lib依赖包输出目录,打包的时候不打进jar包里 -->
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<excludeTransitive>false</excludeTransitive>
<stripVersion>false</stripVersion>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
这样打包之后会在target目录里新生成一个lib文件夹,这个文件夹里就全是依赖包
部署到服务器将lib包和启动jar包放置同一目录下,
修改启动命令:添加-Dloader.path="lib/"
例如:nohup /opt/jdk8/bin/java -Dloader.path="lib/" -jar xxx.jar
以后部署的时候只需上传修改时间为最近的包即可。
完美解决!!!