==
сравнивает ссылки на объекты в Java и не является исключением для объектов String
.
Для сравнения фактического содержимого объектов (в том числе String
) необходимо использовать equals
.
Если сравнение двух объектов String
с использованием ==
оказывается true
, это связано с тем, что объекты String
были интернированы, а виртуальная машина Java имеет несколько ссылки указывают на тот же экземпляр String
. Не следует ожидать сравнения одного объекта String
, содержащего то же содержимое, что и другой объект String
, используя ==
для оценки как true
.
На самом деле, я думаю, что ответ, данный в вопросе , который вы упомянули, просто неверен ( ОБНОВЛЕНИЕ - 20101106: кто-то исправил это, этот ответ относится к версии, предшествующей редактированию ), и это объясняет, по крайней мере частично, почему у вас проблемы.
Он генерирует два файла jar в logmanager / target: logmanager-0.1.0.jar и logmanager-0.1.0-jar-with-dependencies.jar.
Первый - это JAR-файл модуля logmanager, созданный во время фазы пакета
jar: jar
(поскольку модуль имеет упаковку типа jar
). Вторая - это сборка, созданная сборкой : сборка
и должна содержать классы из текущего модуля и его зависимости (если вы использовали дескриптор jar-with-dependencies
).
Я получаю сообщение об ошибке, когда дважды щелкаю первый jar:
Не удалось найти основной класс: com.gorkwobble.logmanager.LogManager. Программа будет закрыта.
Если вы применили предложенную конфигурацию ссылки, размещенной в качестве справки, вы настроили плагин jar для создания исполняемого артефакта, примерно так:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.gorkwobble.logmanager.LogManager</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
Итак, logmanager-0.1.0.jar
действительно исполняемый файл, но 1. это не то, что вы хотите (потому что он не имеет всех зависимостей) и 2. он не содержит com.gorkwobble.logmanager.LogManager
(это то, что говорит ошибка, проверьте содержимое jar).
Немного другая ошибка, когда я дважды щелкаю jar-with-dependencies.jar:
Не удалось загрузить атрибут манифеста основного класса из: C: \ EclipseProjects \ logmanager \ target \ logmanager-0.1.0-jar-with-dependencies.jar
Опять же, если вы настроили подключаемый модуль сборки, как было предложено, у вас будет что-то вроде этого:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
При этой настройке logmanager-0.1.0-jar-with-dependencies.jar
содержит классы из текущий модуль и его зависимости, но, согласно ошибке, его META-INF / MANIFEST.MF
не не содержит Main-Class
запись (вероятно, это не тот же файл MANIFEST.MF, что и в logmanager-0.1.0.jar). На самом деле jar является не исполняемым файлом, что опять же не то, что вам нужно.
Итак, я предлагаю удалить элемент конфигурации
из maven-jar-plugin и настройте maven-assembly-plugin следующим образом:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<!-- nothing here -->
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-4</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>org.sample.App</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
Конечно, замените org.sample.App
классом, который вы хотите выполнить. Маленький бонус, я связанная сборка : отдельная
к фазе пакета
, поэтому вам больше не нужно запускать сборку: сборку
. Просто запустите mvn install
, и сборка будет создана во время стандартной сборки.
Итак, обновите ваш pom.xml конфигурацией, указанной выше, и запустите mvn clean install
. Затем перейдите в каталог target
и повторите попытку:
java -jar logmanager-0.1.0-jar-with-dependencies.jar
Если вы получили сообщение об ошибке, обновите свой вопрос, добавив его в свой вопрос и опубликуйте содержание META-INF / MANIFEST.MF
и соответствующую часть вашего pom.xml
(части конфигурации плагинов). Также опубликуйте результат:
java -cp logmanager-0.1.0-jar-with-dependencies.jar com.gorkwobble.logmanager.LogManager
, чтобы продемонстрировать, что он работает нормально в командной строке (независимо от того, что говорит eclipse).
EDIT: для Java 6, вам необходимо настроить maven-compiler-plugin. Добавьте это в свой pom.xml:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>