2017-01-11 9 views
0

Моей проблемы (с Maven) только существует на Windows (не Linux) и не внутри IDE (Eclipse)JDK com.sun.tools не найден после Maven установки

Класс:

... 

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

    ... 

Исключение:

 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 

Моя среда:

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

Мои Архитектура проекта:

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 

Что работает:

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_ 

Мои не -рабочая-решения, чтобы сделать его найти LIB на окнах в main.jar:

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

Я нашел много обходных решений, таких как профили maven и т. Д., Я тестировал их все, но ничего не работало редактор Один раз Я получил это сработало, когда я скопировал com.sun.tools через плагин maven (mvn install ...) в JAR. Тогда это сработало.

Но мне это нужно, чтобы найти com.sun.tools динамически - в зависимости от операционной системы Linux и окон.

Любые предложения по следующим шагам? Я не знаю, что я могу сделать, чтобы это сработало. Я всегда получаю это исключение при использовании этого tools.jar на окнах после выполнения его с помощью ... java -jar Main.jar

Цель: Я хочу запустить Main.jar (java -jar Main.jar) на любом папку, которую я хочу.


UPDATE: Я добавил образец проекта, который терпит неудачу для меня именно с этой ошибкой.

Просто создайте новый проект Maven и добавьте его в Main.java и в POM. Установите его с помощью: mvn install и он не работает. Использовать строитель баннера eclipse, и он работает! ??? WTF Почему?

Код:

... 

    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

Класс com.sun. * Jave никогда не был частью публичного API Java.Они не должны использоваться и могут быть изменены или удалены в любое время (и я не буду даже присутствовать в реализации Java разных вендоров). – hardillb

+0

В среде IDE может использоваться другая среда выполнения Java, встроенная в ее каталог установки. Попробуйте выполнить свой код с помощью java-исполняемого файла в этом месте. –

+0

Я добавил свою цель, которую хочу сделать. – thunder

ответ

0

Я знаю его не решение для текущей задачи, но я использую обходной путь, и я могу рекомендовать его к любой другой. Я использую https://github.com/oshi/oshi сейчас, потому что у него есть все функции, в которых я нуждаюсь, и хотел бы получить с этим com.sun.tools.

Но в любом случае было бы хорошо услышать, есть ли у кого-нибудь рабочее решение для этой проблемы с maven (возможно, maven {java.home}?).