2017-01-11 2 views
0

Mein Problem (mit MAVEN) ist nur unter Windows (nicht Linux) und nicht in der IDE (Eclipse)JDK com.sun.tools nicht nach Maven installieren

Klasse gefunden:

... 

    System.out.println("Location of Tools --> " + VirtualMachine.class.getProtectionDomain().getCodeSource().getLocation()); 

    ... 

Ausnahme:

 Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/attach/VirtualMachine 
       at my.package.bootstrap(Controller.java:37) 
       at my.package.main(Main.java:35) 
     Caused by: java.lang.ClassNotFoundException: com.sun.tools.attach.VirtualMachine 
       at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
       at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
       at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
       at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
       ... 2 more 

Meine Umwelt:

Windows: Windows 10 (Here are the Problems!!!) 
Linux: Xubuntu 16.04 (Works fine) 
Java: 8 oracle (not openjdk!) 
Maven (**using the maven-assembly-plugin for installing**) 

Mein Projekt Architektur:

My Project which using the com.sun.tools is a library: lib.jar 
which gets used by Main Project: Main.jar. 

I'm using maven to compile all of that into Main.jar 

Was funktioniert:

Linux Eclipse IDE: found 
Linux - Shell: java -jar myjar.jar: found 

Windows Eclipse IDE: found 
--> Windows - Bash: /java_jdk_path/java -jar myjar.jar: _NOT_FOUND_ 

Meine nicht -Arbeiten-Lösungen zu den lib auf Fenster in main.jar machen zu finden:

set %JAVA_HOME% ... to jdk 
set %JRE_HOME% ... to jre 

Ich fand eine Menge Workarounds wie zB Maven Profile und so weiter, ich testete alle von ihnen, aber nichts funktioniert ed. Einmal Ich habe es funktioniert, als ich die com.sun.tools über Maven Plugin (MVN Install ...) in das JAR kopiert. Dann hat es geklappt.

Aber ich brauche es, um die com.sun.tools dynamisch zu finden - je nach Betriebssystem Linux und Windows.

Irgendwelche Vorschläge für meine nächsten Schritte? Ich weiß nicht, was ich tun könnte, dass es funktioniert. Ich bekomme immer diese Ausnahme, wenn diese tools.jar auf Windows nach der Ausführung mit ... java -jar Main.jar

Ziel: Ich möchte Main.jar (java -jar Main.jar) auf jedem starten Ordner, den ich möchte.


UPDATE: Ich habe ein Probe-Projekt, das mit diesem Fehler für mich genau ausfällt.

Erstellen Sie einfach ein neues Maven-Projekt und fügen Sie dieses zu Main.java und zu POM hinzu. Installieren Sie es mit: mvn install und es schlägt fehl. Verwenden Sie den Eclipse-JAR-Builder und es funktioniert! WTF Warum?

Code:

... 

    System.out.println("Location of Tools --> " + VirtualMachine.class.getProtectionDomain().getCodeSource().getLocation()); 

    ... 

POM:

<properties> 
      <java.version>1.8</java.version> 
      <maven.compiler.source>1.8</maven.compiler.source> 
      <maven.compiler.target>1.8</maven.compiler.target> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>com.sun</groupId> 
      <artifactId>tools</artifactId> 
      <version>1.8</version> 
      <scope>system</scope> 
      <systemPath>${env.JAVA_HOME}/lib/tools.jar</systemPath> 
     </dependency> 
    </dependencies> 

    <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-assembly-plugin</artifactId> 
        <version>3.0.0</version> 
        <configuration> 
         <outputDirectory>C:\Output\</outputDirectory> 
         <archive> 
          <manifest> 
           <mainClass>com.test.Main</mainClass> 
          </manifest> 
         </archive> 
         <descriptorRefs> 
          <descriptorRef>jar-with-dependencies</descriptorRef> 
         </descriptorRefs> 
         <appendAssemblyId>false</appendAssemblyId> 
        </configuration> 
        <executions> 
         <execution> 
          <id>make-assembly</id> <!-- this is used for inheritance merges --> 
          <phase>package</phase> <!-- bind to the packaging phase --> 
          <goals> 
           <goal>single</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
    </build> 
+0

Die Klassen com.sun. * Jave war nie Teil der öffentlichen API von Java.Sie sollten nicht verwendet werden und können jederzeit geändert oder entfernt werden (und meine Java-Implementierung ist nicht in verschiedenen Anbietern vorhanden). – hardillb

+0

IDE verwendet möglicherweise eine andere Java-Laufzeitumgebung, die in das Installationsverzeichnis eingebettet ist. Versuchen Sie, Ihren Code mit Java-Executable an diesem Ort auszuführen. –

+0

Ich habe mein Ziel hinzugefügt, was ich tun möchte. – thunder

Antwort

0

Ich weiß, es ist nicht die Lösung für das aktuelle Problem, aber ich bin mit einem Problem zu umgehen, und ich kann es jedem anderen empfehlen. Ich verwende jetzt https://github.com/oshi/oshi, weil es alle Funktionen hat, die ich brauche und mit dem com.sun.tools bekommen wollte.

Aber auf jeden Fall wäre es nett zu hören, ob jemand eine funktionierende Lösung für dieses maven install (vielleicht maven {java.home} Bug?) Problem hat.

Verwandte Themen