java工程如果打包成war,那依賴的jar包都會被包含進去。
不過如果開發java的后台駐留進程,那一般會打包成jar包的形式,要想在運行進程的時候找到所有的依賴包,基本有如下兩種方式:
方式一:
maven assembly插件方式打包,這樣所有的依賴jar包會整合到一個大的jar包里頭,不太適合開發階段,因為打包比較耗時。
方式二:
mavn exec插件,也是開發的時候推薦的方式。
這樣運行java進程的時候就不需要再去為 -classpath而煩惱了。一般maven管理的工程,在工程的根目錄下執行 mvn clean & mvn package,然后在運行以下示例命令就可以。
mvn exec:exec -Dexec.executable="java" -Dexec.args="-cp %classpath com.timer.TimerTask"
這樣的好處是,本地的eclipse和線上測試機器,可以通過svn等代碼管理工具做代碼同步,改好代碼需要測試的話,在本地svn commit,然后測試linux機器上運行svn up & mvn package & mvn exec:exec -D....命令就很方便測試了。
當然mvn exec:exec 還可以指定jvm參數,系統屬性,比如
mvn exec:exec -Dexec.executable="java" -Dexec.args="-DsystemProperty1=value1 -DsystemProperty2=value2 -XX:MaxPermSize=256m -cp %classpath com.project.Main arg1 arg2"
運行mvn exec:exec...... 之后會看到除了主函數main進程之外,還有一個守護進程Launcher
如果主函數的進程被殺掉,只剩下守護進程Launcher的時候,守護進程也會自動從jvm中退出