2012-06-09 2 views
3

У меня возникли проблемы с созданием исполняемого файла из простой Java-программы.Создание исполняемого JAR с плагином Maven Shade

Я последовал 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. 

Таким образом, ничего не получается!

Как я могу заставить свою банку выполнить правильно?

Спасибо за помощь!

+0

Как вы пытаетесь выполнить его? Это не выглядит так, как если бы вы сказали: «java -jar MYJARFILE» – bmargulies

+0

Ну, на самом деле, мне нужно было сделать его исполняемым на моем первом Ubuntu ... –

+0

@Vakimshaar Исполняемый флаг на Ubuntu не является необходимым, потому что он будет выполнен от JVM ... а не от самого os. – khmarbaise

ответ

-1

У меня есть простое решение с плагином сборки. Это решение будет иметь банку (мишень/$ {project.groupdId} - $ {project.artifactId} - $ {project.version} .jar):

  • , содержащий все необходимые зависимости
  • , что является исполняемым (с помощью Java -jar * .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 создать исполняемый файл банку

<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> 

Смежные вопросы