2012-06-09 60 views
3

我無法從簡單的Java程序製作可執行jar。使用Maven Shade插件創建可執行JAR

我跟着these Maven instructions和修改我的pom.xml

<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <version>1.7</version> 
    <executions> 
     <execution> 
     <phase>package</phase> 
     <goals> 
      <goal>shade</goal> 
     </goals> 
     <configuration> 
      <transformers> 
      <transformer implementation= 
      "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
       <mainClass>package.MyClass</mainClass> 
      </transformer> 
      </transformers> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
</plugins> 

當執行install目標,我可以讀行:

[INFO] Replacing /home/project-1.0.0.jar with /home/project-1.0.0-shaded.jar 

但所有我能找到在那個位置是project-1.0.0.jar,實際上包含依賴關係 - 並且具有合適的大小 - 但是當試圖用我的jre執行它時,它會說:

The file '/home/project-1.0.0.jar' is not marked as executable. 

因此什麼都得不到執行!

如何讓我的jar正確執行?

感謝您的幫助!

+0

你是如何嘗試執行呢?它不像我說的那樣,「java -jar MYJARFILE」 – bmargulies

+0

實際上,我必須首先在我的Ubuntu上使其可執行...... –

+0

@Vakimshaar Ubuntu上的可執行標誌不是必需的,因爲它將被執行由JVM ......而不是由操作系統本身。 – khmarbaise

回答

-1

我對彙編插件有一個簡單的解決方案。該解決方案將使罐子(目標/ $ {project.groupdId} - $ {project.artifactId} - $ {} project.version的.jar):

  • 包含所有需要的依賴
  • 是可執行(通過Java的罐子的* .jar)

在聲明POM文件:

  <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 

      <configuration> 
       <appendAssemblyId>false</appendAssemblyId> 

       <archive> 
        <manifest> 
         <mainClass>package.MyClass</mainClass> 
        </manifest> 
       </archive> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
      </configuration> 

      <executions> 
       <execution> 
        <id>make-executable-jar</id> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

我希望我幫你! 乾杯!

+0

作者以正確的方式處理它的陰影。 – ManuelSchneid3r

0

由於是的pom.xml創建可執行的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/maven-v4_0_0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>org.executablejar</groupId> 
<artifactId>demo</artifactId> 
<packaging>jar</packaging> 
<version>0.0.1-SNAPSHOT</version> 
<name>demo Maven Webapp</name> 
<url>http://maven.apache.org</url> 

<properties> 
    <java-version>1.8</java-version> 
    <docker.image.prefix>springDemo</docker.image.prefix> 
</properties> 

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.3.3.RELEASE</version> 
</parent> 

<dependencies> 

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

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

    <dependency> 
     <groupId>org.apache.tomcat.embed</groupId> 
     <artifactId>tomcat-embed-jasper</artifactId> 
    </dependency> 

</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
    <finalName>demo</finalName> 
</build> 

相關問題