perakitan pakar - toples melewatkan kelasnya sendiri

Saya ingin membuat file jar dari proyek pakar. Saya perlu menggunakan assembly.xml sendiri karena saya perlu mengecualikan beberapa file .so:

perakitan.xml

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">

  <id>assembly-with-so</id>
  <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    <!-- package the regular dependencies -->
    <dependencySet>
      <outputDirectory>/</outputDirectory>
      <useProjectArtifact>true</useProjectArtifact>
      <unpack>true</unpack>
      <scope>runtime</scope>
      <excludes>
        <exclude>jcuda:libJCublas:so:linux-x86_64:0.6.5</exclude>
        [...]
      </excludes>
    </dependencySet>
    <dependencySet>
      <outputDirectory>/</outputDirectory>
      <includes>
        <include>jcuda:libJCublas:so:linux-x86_64:0.6.5</include>
        [...]
      </includes>
    </dependencySet>
  </dependencySets>
</assembly>

pom.xml

[...]
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <id>jar-with-dependencies</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <descriptor>src/main/assembly/assembly.xml</descriptor>
                <appendAssemblyId>false</appendAssemblyId>
                <archive>
                    <manifest>
                        <mainClass>org.test.Test</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        [...]
</build>

Ketika saya memulai file jar menggunakan java -jar File.jar saya mendapatkan kesalahan bahwa kelas org.test.Test hilang. Ketika saya membuka file .jar untuk melihat isinya, saya melihat bahwa setiap file dependensi ada di sana tetapi file proyek utama hilang.


person user1406177    schedule 23.10.2014    source sumber
comment
Mengapa Anda mengecualikan jcuda di set pertama dan memasukkannya lagi di set kedua?   -  person Aaron Digulla    schedule 23.10.2014
comment
Ada masalah karena maven ingin membongkar file .so, jadi saya mengecualikannya dari pembongkaran tetapi memasukkannya ke dalam .jar   -  person user1406177    schedule 24.10.2014
comment
@ user1406177 Tentu saja ia mencoba membongkar file-file itu, karena Anda mengkonfigurasinya seperti itu (<unpack>true</unpack>). Mengapa Anda menjalankan Majelis dalam fase prepare-package bukannya package..Ini bisa menjelaskan mengapa kelas utama jar-file tidak dikemas ke dalamnya.   -  person khmarbaise    schedule 24.10.2014
comment
Mengubah prepare-package menjadi package tidak menyelesaikannya.   -  person user1406177    schedule 24.10.2014


Jawaban (1)


Nah untuk seseorang dengan masalah yang sama. Hal itu juga terjadi pada saya. Dan jawabannya adalah:

Apakah Anda memeriksa bahwa kelas Anda tidak ada di dalam folder /src/test/java? Maven hanya menyalin kelas ke toples yang ada di dalam folder /src/main/java.

Saya tahu ini aneh tetapi ini terjadi ketika Anda ingin mengemas tes otomatis Selenium.

solusinya tentu saja dengan memindahkan kelas anda ke /src/main/java

Semoga ini bisa membantu

person Carlos Rafael Ramirez    schedule 21.02.2018
comment
ini juga masalah saya ketika menggunakan Dockerfile yang salah. - person Sebastian; 12.07.2018