0

Ich habe eine Scala-Anwendung, die ich versuche, als .jar-Datei mit Maven zu packen. Es gibt eine application.conf-Datei, die ich in das Jar als Ressource verpacken möchte. Wenn ich jedoch das Ressourcen-Plugin verwende, entweder automatisch, indem ich die Ressourcen in src/main/resources setze, oder indem ich es explizit aus einem anderen Ordner in pom.xml hinzufüge, hört Maven dann auf, die .class-Dateien im jar zu kompilieren und zu packen.Maven nicht kompilieren oder einschließlich Scala .class-Dateien in jar nur bei Verwendung von Ressourcen-Plugin

Solange ich nicht das Ressourcen-Plugin verwende, funktioniert alles 100%. Maven führt den Scala Compiler aus, legt die .class Dateien in das jar und nach dem manuellen Hinzufügen meiner Ressourcen über 7zip läuft das Programm gut.

Einige weitere Details:

  • Ich bin mit dem scala-Maven-Plugin mit dem Artima Supersafe Compiler Plugin
  • ich auch die Maven-Schatten-Plugin bin mit einem Fett Glas zu erzeugen, Verknüpfen Sie akka reference.conf-Dateien und generieren Sie das Manifest. Dies funktioniert immer noch, wenn Sie das Ressourcen-Plugin verwenden, es fehlen nur meine .class-Dateien. Ich habe versucht, ohne dieses Plugin zu laufen, aber die Ergebnisse sind genau die gleichen.
  • Ich Angabe manuell den Quellverzeichnis als src/main/scala
  • Wenn die Ressource nicht-Plugin, das Scala kompiliert und die Konsolenausgabe zeigt [INFO] --- scala-maven-plugin:3.2.0:compile (default) @ batchmanager --- von Compiler-Warnungen gefolgt usw. Wenn jedoch die Ressource verwenden sie stattdessen Plugin immer betont: [INFO] Nothing to compile - all classes are up to date
  • die application.conf Datei tatsächlich in das Glas richtig angezeigt wird, wenn das Plugin Ressource mit
  • ich Maven durch Eclipse-laufen, nicht die CLI

ich habe das Gefühl, es ist etwas a über das Ressourcen-Plugin, das ich nicht verstehe. Jede Hilfe würde sehr geschätzt werden.

Der vollständige pom.xml (die Ressourcen-Definition zu entfernen, ist der einzige Unterschied zwischen den Arbeits- und Nichtarbeits Versionen der Datei)

<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>com.digitalalbatross</groupId> 
    <artifactId>batchmanager</artifactId> 
    <version>0.0.1</version> 
    <name>${project.artifactId}</name> 
    <inceptionYear>2017</inceptionYear> 
    <licenses> 
     <license> 
      <name>My License</name> 
      <url>http://....</url> 
      <distribution>repo</distribution> 
     </license> 
    </licenses> 

    <properties> 
     <maven.compiler.source>1.6</maven.compiler.source> 
     <maven.compiler.target>1.6</maven.compiler.target> 
     <encoding>UTF-8</encoding> 
     <scala.version>2.12.2</scala.version> 
     <scala.compat.version>2.12</scala.compat.version> 
    </properties> 

    <repositories> 
     <repository> 
      <id>artima</id> 
      <name>Artima Maven Repository</name> 
      <url>http://repo.artima.com/releases</url> 
     </repository> 
    </repositories> 

    <dependencies> 

     <!-- Test --> 
     <dependency> 
      <groupId>com.typesafe.akka</groupId> 
      <artifactId>akka-http_2.12</artifactId> 
      <version>10.0.7</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.scala-lang</groupId> 
        <artifactId>scala-library</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.iq80.leveldb</groupId> 
      <artifactId>leveldb</artifactId> 
      <version>0.9</version> 
     </dependency> 
     <dependency> 
      <groupId>org.fusesource.leveldbjni</groupId> 
      <artifactId>leveldbjni-all</artifactId> 
      <version>1.8</version> 
     </dependency> 
     <dependency> 
      <groupId>com.typesafe.akka</groupId> 
      <artifactId>akka-actor_2.12</artifactId> 
      <version>2.5.1</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.scala-lang</groupId> 
        <artifactId>scala-library</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>com.typesafe.akka</groupId> 
      <artifactId>akka-persistence_2.12</artifactId> 
      <version>2.5.1</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.scala-lang</groupId> 
        <artifactId>scala-library</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>com.typesafe.akka</groupId> 
      <artifactId>akka-stream_2.12</artifactId> 
      <version>2.5.1</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.scala-lang</groupId> 
        <artifactId>scala-library</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>com.typesafe.akka</groupId> 
      <artifactId>akka-http-spray-json_2.12</artifactId> 
      <version>10.0.6</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.scala-lang</groupId> 
        <artifactId>scala-library</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.scalatest</groupId> 
      <artifactId>scalatest_2.12</artifactId> 
      <version>3.0.3</version> 
      <exclusions> 
       <exclusion> 
        <groupId>org.scala-lang</groupId> 
        <artifactId>scala-library</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.scala-lang</groupId> 
      <artifactId>scala-library</artifactId> 
      <version>2.12.2</version> 
     </dependency> 
    </dependencies> 

    <build> 

     <sourceDirectory>src/main/scala</sourceDirectory> 
     <testSourceDirectory>src/test/scala</testSourceDirectory> 

     <resources> 
      <resource> 
       <directory>res</directory> 
       <includes> 
        <include>application.conf</include> 
       </includes> 
      </resource> 
     </resources> 


     <plugins> 
      <plugin> 
       <!-- see http://davidb.github.com/scala-maven-plugin --> 
       <groupId>net.alchim31.maven</groupId> 
       <artifactId>scala-maven-plugin</artifactId> 
       <version>3.2.0</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>compile</goal> 
          <goal>testCompile</goal> 
         </goals> 
         <configuration> 
          <compilerPlugins> 
           <compilerPlugin> 
            <groupId>com.artima.supersafe</groupId> 
            <artifactId>supersafe_${scala.version}</artifactId> 
            <version>1.1.2</version> 
           </compilerPlugin> 
          </compilerPlugins> 
          <args> 

           <arg>-dependencyfile</arg> 
           <arg>${project.build.directory}/.scala_dependencies</arg> 
          </args> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <version>2.18.1</version> 
       <configuration> 
        <useFile>false</useFile> 
        <disableXmlReport>true</disableXmlReport> 
        <!-- If you have classpath issue like NoDefClassError,... --> 
        <!-- useManifestOnlyJar>false</useManifestOnlyJar --> 
        <includes> 
         <include>**/*Test.*</include> 
         <include>**/*Suite.*</include> 
        </includes> 
       </configuration> 
      </plugin> 



      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-shade-plugin</artifactId> 
       <version>3.0.0</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
         <configuration> 
          <shadedArtifactAttached>true</shadedArtifactAttached> 
          <shadedClassifierName>allinone</shadedClassifierName> 
          <artifactSet> 
           <includes> 
            <include>*:*</include> 
           </includes> 
          </artifactSet> 
          <transformers> 
           <transformer 
            implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
            <resource>reference.conf</resource> 
           </transformer> 
           <transformer 
            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
            <manifestEntries> 
             <Main-Class>com.digitalalbatross.batchmanager.Boot</Main-Class> 
            </manifestEntries> 
           </transformer> 
          </transformers> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

     </plugins> 
    </build> 
    <description>Batch Manager for IMAX</description> 
    <organization> 
     <name>Digital Albatross Design and Consulting</name> 
     <url>digitalalbatross.com</url> 
    </organization> 
</project> 

Antwort

0

ich es geschaffen, mein Problem im Laufe der Lösung eines anderen zu lösen. Meine Eclipse-Workbench stürzte beim Booten ab, also löschte ich den .plugins-Ordner, um das Problem zu lösen. Dadurch wurde nicht nur mein Eclipse-Setup repariert, sondern Maven entschied sich zur Zusammenarbeit und begann, sowohl Ressourcen- als auch Klassendateien in das Jar aufzunehmen. Nach einiger Verwirrung darüber, welche der generierten JAR-Dateien tatsächlich ein funktionierendes Manifest enthielt, habe ich überprüft, dass es jetzt wie erwartet funktioniert.

Um es zusammenzufassen, es war wahrscheinlich ein bizarrer Fehler, der durch etwas in meinem .plugins-Ordner für Eclipse verursacht wurde. Durch das Löschen dieses Ordners und das Neukonfigurieren meines Setups wurde das Problem behoben.

Verwandte Themen