1. 程式人生 > >maven專案如何打包成jar以便通過java -jar執行

maven專案如何打包成jar以便通過java -jar執行

java -jar經常會報兩個錯誤

1. 找不到主類異常

2. 依賴的jar檔案未打入到包中

怎麼解決呢?

1. POM檔案新增maven-compiler-plugin以及maven-assembly-plugin,注意在maven-assembly-plugin中要指定mainClass,這樣可以避免java –jar 時報找不到主類異常。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>cn.hfi</groupId>
  <artifactId>itemProcess</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>itemProcess</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
  </properties>

  <dependencies>
    
  </dependencies>

  <build>
    <finalName>${project.artifactId}</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.5.1</version>
        <configuration>
          <source>${java.version}</source>
          <target>${java.version}</target>
          <showWarnings>true</showWarnings>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.1.0</version>
        <configuration>
          <archive>
            <manifest>
              <mainClass>cn.hfi.App</mainClass>
            </manifest>
          </archive>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

2. 在intelliij idea的專案terminal中執行mvn compile assembly:single

會進行打包,並將依賴打入到包中

E:\develop_IJ\itemProcess>mvn compile assembly:single
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building itemProcess 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[WARNING] The artifact org.apache.commons:commons-io:jar:1.3.2 has been relocated to commons-io:commons-io:jar:1.3.2
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ itemProcess ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 3 resources
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ itemProcess ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-assembly-plugin:3.1.0:single (default-cli) @ itemProcess ---
[WARNING] While downloading org.apache.commons:commons-io:1.3.2
  This artifact has been relocated to commons-io:commons-io:1.3.2.
  https://issues.sonatype.org/browse/MVNCENTRAL-244


[INFO] Building jar: E:\develop_IJ\itemProcess\target\itemProcess-jar-with-dependencies.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.924 s
[INFO] Finished at: 2018-07-30T11:48:16+08:00
[INFO] Final Memory: 35M/516M
[INFO] ------------------------------------------------------------------------

3. windows下開啟cmd,cd到jar位置

執行java -jar  itemProcess-jar-with-dependencies.jar

4. 可能存在以下這個需求:一個maven專案中有多個帶main函式的子專案,那麼如何指定生成的某個jar檔案呢?

比如下面這個配置檔案

<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>make-network-logs-job</id>
<configuration>
<descriptors>
	<descriptor>assembly.xml</descriptor>
</descriptors>
<archive>
	<manifest>
		<mainClass>com.packtpub.esh.nwlogs.Driver</mainClass>
	</manifest>
</archive>
<finalName>${project.artifactId}-${project.version}-nwlogs</finalName>
</configuration>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
<execution>
<id>make-tweets2es-job</id>
<configuration>
<descriptors>
	<descriptor>assembly.xml</descriptor>
</descriptors>
<archive>
	<manifest>
		<mainClass>com.packtpub.esh.tweets2es.Driver</mainClass>
	</manifest>
</archive>
<finalName>${project.artifactId}-${project.version}-tweets2es</finalName>
</configuration>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
<execution>
<id>make-tweets2hdfs-job</id>
<configuration>
<descriptors>
	<descriptor>assembly.xml</descriptor>
</descriptors>
<archive>
	<manifest>
		<mainClass>com.packtpub.esh.tweets2hdfs.Driver</mainClass>
	</manifest>
</archive>
<finalName>${project.artifactId}-${project.version}-tweets2hdfs</finalName>
</configuration>
<phase>package</phase>

<goals>
<goal>single</goal>
</goals>

</execution>
<execution>
<id>make-historywords-job</id>
<configuration>
<descriptors>
	<descriptor>assembly.xml</descriptor>
</descriptors>
<archive>
	<manifest>
		<mainClass>com.packtpub.esh.historywords2hdfs.EsToHDFS</mainClass>
	</manifest>
</archive>
<finalName>history2hdfs</finalName>
</configuration>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>

</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>

可以指定mvn compile assembly:[email protected]來執行具體某個execution id的任務

另一種可選的解決方法是使用profile,在這裡有種大材小用的感覺

相關推薦

maven專案如何打包jar以便通過java -jar執行

java -jar經常會報兩個錯誤 1. 找不到主類異常 2. 依賴的jar檔案未打入到包中 怎麼解決呢? 1. POM檔案新增maven-compiler-plugin以及maven-assembly-plugin,注意在maven-assembly-plugin中

MAVEN專案打包jar,供普通Java專案呼叫

1、定義生成格式 把pom.xml中<packaging>設定為jar <name>scenario</name> <!-- 宣告更友好的專案名稱(非必須) --> 2、將MAVEN依賴也打進jar包中 在工

Maven專案打包執行jar檔案和外種配置方式(引用第三方jar)

http://blog.csdn.net/zhangdaiscott/article/details/6911640 方法一. mvn assembly 或 mvn package (一個jar包) 把依賴包和自己專案的檔案打包如同一個jar包(這種方式對sp

eclipse maven專案打包jar

這裡介紹常見的兩種打jar包的方法 1.在pom.xml配置檔案中新增如下資訊,可生成普通的jar包: <packaging>jar</packaging>或者不加,也會預設打成jar包 然後通過maven快捷命令 maven-install打包(

Maven專案打包執行jar檔案(引用第三方jar)

http://blog.csdn.net/zhangdaiscott/article/details/6911640 方法一. mvn assembly 或 mvn package (一個jar包) 把依賴包和自己專案的檔案打包如同一個jar包(這種方式對spring的專案

maven專案 打包jar包無法打入本地jar包的解決辦法

專案中想要使用本地的jar包的時候,我們在編譯器中可以匯入,並且在打包成war包的時候也能打入進去,但是將專案打包成jar包的時候 卻無法打入。因為jar包中 jar的檔案打包在了BOOT-INF中。如下圖 這裡可以看到,maven中的jar包全部在這裡,

Maven專案打包執行jar

方法一:將專案及所依賴的所有jar包打包成一個jar。 1、pom.xml“project\build\plugins”的子節點下新增assembly外掛: <build> <plugins> <plugin> &l

如何將maven專案打包執行jar

方法一:將專案及所依賴的所有jar包打包成一個jar。 1、pom.xml新增assembly外掛 2、執行mvn assembly:assembly 3、生成如下檔案 4、執行java -jar quickstart-1.0.0-jar-with-depende

hadoop-maven專案打包執行jar

環境: cdh5.1.0 jdk1.7 <build> <plugins> <!--指定JDK為1.7 --> <plugin> <groupId>org.apache.maven.plug

怎麼將maven專案打包war包

問題:我在eclipse上能執行,然後我想將這個maven專案打包成war然後放到另外一臺機子上(其實是手動放在tomcat的webapp目錄中),提供外部訪問。現在問題是,一直maven專案打包一直出錯。請問大俠怎麼將maven打包好?萬分感謝回答1:右鍵專案,選擇Run As,再選擇Maven build

MavenMaven 專案打包 war 包部署到 Tomcat

【Maven】Maven 專案打包成 war 包部署到 Tomcat   實踐環境 作業系統: Windows IDE: Eclipse 打包部署過程  1 專案打包   1.1 右鍵點選所需要打包的專案,點選如圖所示&

idea將maven專案打包war包並部署

1.將web專案通過maven打包成war包(pom檔案中的打包方式為war) 2.將war包複製到tomcat的webapps目錄下 3.修改server.xml,在Host配置段中新增如下內容 <Host name="localhost" appBase="webapps

使用docker將maven專案打包映象

最近工作中需要使用docker打包成映象啟動,所以有了這篇文章。 差點忘了,你的maven專案中首先要有配置docker打包 以下是maven專案的配置 1.pom檔案中加入plugin <plugin>

maven專案打包的時候忽略第三方依賴jar

因為專案需要經常性的修改-打包-上傳到伺服器,包含lib的war包比較大,第三方jar包基本不會大動,所以就想把這些jar包移出war包,放在jetty裡面,這樣每次只需要編譯打包原始碼即可,war包大小極度減小,方便上傳。 maven配置 <plug

maven專案打包war包,部署到tomcat伺服器

1.右鍵要打包的專案,選擇Run As -> Maven install :2.出現以下情況,則說明打包成功。3.重新整理工程,在target中發現打包好的war包,並且複製war包,放入tomcat的webapps中,因為war包的名字過長,放入webapp時可以修改

idea上把maven專案打包war包直接部署在tomcat上

idea剛上手不久,搗騰了幾個小專案練手,發現idea非常人性化,它可以直接把按鍵設定成eclipse一樣的,這個IDE確實比eclipse更順手點,比如響應比較快。下面我直接把war包雲新在tomc

eclipse 把maven專案打包maven依賴包

如果第一次需要設定  專案:右擊---》run as  maven  clean ----->run as  maven build 設定goals 為dependency:copy-depen

用eclipse把maven專案打包war併發布到jboss伺服器上的步驟

第一步:開啟eclipse,對maven專案右擊,點擊出現的Debug As---->Debug configurations,點選Debug configurations,找到Maven Bu

spring boot專案打包war 並在tomcat上執行的步驟詳解

把spring-boot專案按照平常的web專案一樣釋出到tomcat容器下 一、修改打包形式 在pom.xml裡設定 <packaging>war</packaging> 二、移除嵌入式tomcat外掛 在pom.xml裡找到spri

spring boot專案打包war並在tomcat上執行的步驟

原文地址:http://m.blog.csdn.net/article/details?id=52515226 把spring-boot專案按照平常的web專案一樣釋出到tomcat容器下 一、修改打包形式 在pom.xml裡設定 <packaging>