2015-03-03 2 views
0

Я портирую проект в Maven. Кажется, я почти закончил, хотя есть еще странная проблема. У меня есть перечисление:Как импортировать нормальное перечисление в проект maven?

package cz.autoclient.settings; 

public enum Setnames { 
    SETTING1("s1", false), 
    SETTING2("s2", 666), 
    ; 

    public final String name; 
    public final Object def; 
    Setnames(String n, Object d) { 
    name = n; 
    def = d;  
    } 
} 

я использую именно этот enum, чтобы избежать Воссоздание String всякий раз, когда некоторые установки загружается из базы данных. И для сохранения значений по умолчанию.

В моем старом проекте, это действительно было:

import cz.autoclient.settings.Setnames; 

В Maven, есть проблема:

Exception in thread "main" java.lang.NoClassDefFoundError: cz/autoclient/settings/Setnames 
    at cz.autoclient.Gui.createTabs(Gui.java:326) 
    at cz.autoclient.Gui.initComponents(Gui.java:165) 
    at cz.autoclient.Gui.<init>(Gui.java:58) 
    at cz.autoclient.Main.startGUI(Main.java:71) 
    at cz.autoclient.Main.<init>(Main.java:32) 
    at cz.autoclient.Main.main(Main.java:98) 
Caused by: java.lang.ClassNotFoundException: cz.autoclient.settings.Setnames 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 

Gui.java:326 это линия, где я первый использовать Setnames. Я был googling и что у меня есть, что вы должны использовать $ при переименовании перечислений как-то.

Но я не знаю, где я должен положить это $ в моем случае - у других людей всегда была эта проблема, когда enum был скрыт внутри класса.

Вот как это выглядит в моем IDE:

image description

Вот проект pom.xml:

<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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 


    <groupId>cz.autoclient</groupId> 
    <artifactId>autoclient</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <properties> 
    <src.dir>src/</src.dir> 
    <test.dir>test/</test.dir> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
    <build> 
    <testSourceDirectory>${test.dir}</testSourceDirectory> 
    <sourceDirectory>${src.dir}</sourceDirectory> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.2</version> 
     <configuration> 
      <source>8</source> 
      <target>8</target> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 

    <name>Auto Client</name> 
    <url>http://maven.apache.org</url> 


    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>net.java.dev.jna</groupId> 
     <artifactId>jna-platform</artifactId> 
     <version>4.1.0</version> 
    </dependency> 
    </dependencies> 
</project> 

Это командная строка NetBeans используется для компиляции проекта:

cd C:\MYSELF\programing\java\AutoCall\AutoClient; "JAVA_HOME=C:\\Program Files\\Java\\jdk1.8.0_31" cmd /c "\"\"C:\\Users\\Jakub\\AppData\\Roaming\\NetBeans\\7.4\\maven\\bin\\mvn.bat\" -Dexec.args=\"-classpath %classpath cz.autoclient.Main\" -Dexec.executable=\"C:\\Program Files\\Java\\jdk1.8.0_31\\bin\\java.exe\" -DnetbeansProjectMappings= -Dmaven.ext.class.path=C:\\Users\\Jakub\\AppData\\Roaming\\NetBeans\\7.4\\maven-nblib\\netbeans-eventspy.jar org.codehaus.mojo:exec-maven-plugin:1.2.1:exec\""

+0

Где это перечисление определено и как попробовать добавить зависимость maven? –

+0

Это в моем проекте, почему я должен добавить зависимость? И, конечно же, он находится в 'cz.autoclient.settings', что означает каталог' \ cz \ autoclient \ settings \ Setnames.java'. –

+0

Пожалуйста, покажите свои полные файлы pom, которые вы используете? какую версию Maven вы используете? И как вы называете Maven? – khmarbaise

ответ

0

Оказалось, что это был какой-то глюк в проекте. Я понятия не имею, как это произошло.

Рефакторинг пакетов с проблемными классами устраняет проблему.

0

Вы создали проект maven и переместили свой класс с cz.autoclient.settings.Setnames на cz.autoclient.PVP_net.Setnames. Теперь вы получаете NoClassDefFoundError, что означает, что Java просто не может найти ваш класс. Зачем? Потому что он перемещен в другое место, но это не имеет ничего общего с maven, которое оно только что произошло после создания проекта maven.

Пожалуйста, проверьте весь свой проект для импорта, как:

import cz.autoclient.settings.Setnames; 

заменить их на что-то вроде:

import cz.autoclient.PVP_net.Setnames; 

Я надеюсь, что поможет вам.

+0

Извините, все вещи '.settings.' - это путаница. Из-за поисковых систем я изначально не хотел раскрывать здесь 'PVP_net'. Это торговая марка какой-то компании. –

+0

В этой заметке следует также помнить, что NetBeans НЕ сообщают о проблемах с поиском классов. Структура проекта верна. –

+0

Я тоже редактировал изображение, теперь он говорит «настройки» повсюду. –

Смежные вопросы