2012-06-09 62 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> 

相关问题