2016-08-09 6 views
0

MyClass.java enthält, ist ein Teil des Projekts B und erzeugt B.jarJAR-Datei, die eine Klasse aus der Abhängigkeit

Projekt A B als eine Abhängigkeit aufweist. Es produziert A.jar

Projekt A baut in Ordnung (also die Abhängigkeit bei der Kompilierung aufgelöst wird)

Meine Android App öffnet die A.jar Datei und versucht MyClass mit Reflexion laden (dies dies zu tun ist Weg, Gründe sind hier kompliziert zu erklären).

Mein Problem ist, bekomme ich diesen Fehler in Laufzeit:

String java.lang.ClassNotFoundException: Nicht Klasse "com.foo.MyClass" auf Pfad: DexPathList [[ZIP-Datei "A.jar"], nativeLibraryDirectories = [/ Verkäufer/lib,/system/lib]]

PS: Wenn ich Quellcode von Projekt B in A kopieren und bauen A.jar das Programm es findet. Aber ich möchte das Kopieren von Quellcode vermeiden.

Gibt es eine Möglichkeit, Maven zu sagen, eine Klasse aus einer Abhängigkeit in die resultierende JAR-Datei aufzunehmen?

+0

Wenn Sie zum Ausdruck B als Abhängigkeit von A über Maven, sollte dies bereits funktionieren - beide Gläser sollten auf Ihrer Runtime-Classpath. –

+0

@OliverCharlesworth Ja, ich mache es, aber es ist nicht – Caner

+0

Sie müssen eine ausführbare jar, wie hier gezeigt http://stackoverflow.com/questions/574594/how-can-i-create-an-executable erstellen -jar-with-dependencies-using-maven oder stellen Sie sicher, dass die Abhängigkeiten zur Laufzeit im Klassenpfad sind. – Tunaki

Antwort

0

ich es geschafft, das Problem zu beheben die maven shade plugin mit:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <version>2.4.3</version> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <createDependencyReducedPom>false</createDependencyReducedPom> 
       <artifactSet> 
        <includes> 
         <include>com.project.B</include> 
        </includes> 
       </artifactSet> 
       <filters> 
        <filter> 
         <artifact>com.project.B:B</artifact> 
         <includes> 
          <include>**/*.class</include> 
         </includes> 
        </filter> 
       </filters> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
Verwandte Themen