#java #pmd
#java #pmd
Вопрос:
У меня есть файл jar, созданный для нескольких пользовательских правил Apex с помощью maven pom. Моя папка src / main / java содержит 8 программ Java. Я создал из него файл jar, но не уверен, когда jar будет выполнен, какой класс будет выполнен? Я хочу запустить анализ с помощью одного файла jar Когда я запускаю это с помощью команды pmd.bat, я получаю исключение с нулевым указателем, поскольку jar не может определить, какой основной класс должен быть вызван первым для запуска анализа
Комментарии:
1. Исполняемый файл jar имеет основной класс, указанный в его манифесте. Кроме того, вы можете указать jar в качестве пути к классу и указать основной класс в командной строке Java.
2. Здравствуйте, у меня есть 8 пользовательских правил, написанных сейчас, и я не уверен, какой основной класс я должен упомянуть в манифесте section..as Я хочу, чтобы были вызваны все классы… Я выполняю jar, помещая в папку lib установки pmd. Ранее я написал одно правило и включил это имя класса в основной класс в разделе манифеста и при запуске pmd bat. Это сработало
3. можете ли вы помочь мне с предложением о том, как я могу включить все эти классы в один файл jar?
Ответ №1:
Вы должны проверить в своем .jar
файле META-INF/MANIFEST.MD
, на какой класс ссылается Main-Class
ключ. Если у вас есть, вы можете указать его во время выполнения с java -jar myjar.jar com.test.Main
помощью (если ваш класс есть com.test.Main
).
Однако было бы лучше указать это непосредственно в MANIFEST.MD , например, с помощью плагина maven
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
...
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
</configuration>
...
</plugin>
</plugins>
</build>
...
</project>
Комментарии:
1. Здравствуйте, у меня есть 8 пользовательских правил, написанных сейчас, и я не уверен, какой основной класс я должен упомянуть в манифесте section..as Я хочу, чтобы были вызваны все классы… Я выполняю jar, помещая в папку lib установки pmd. Ранее я написал одно правило и включил это имя класса в основной класс в разделе манифеста и при запуске pmd bat. Это сработало.
2. Вы всегда можете реализовать «основной» класс, который будет выбирать между 8 на основе argv, или просто выполнить цикл для всех 8!
3. Спасибо, Джонатан .. я думаю, это поможет .. позвольте мне попробовать
Ответ №2:
Я полагаю, вы хотите сделать следующее:
- Вы создали пользовательские правила PMD для языка Apex.
- Вы хотите скомпилировать пользовательские правила.
- Вы хотите создать пользовательский дистрибутив PMD, который содержит все стандартные правила и ваши пользовательские правила, чтобы вы могли легко установить его и использовать
Для этого, пожалуйста, посмотрите пример проекта (https://github.com/pmd/pmd-examples ) — особенно пример для Java: https://github.com/pmd/pmd-examples/tree/java Возможно, он немного устарел, и вам нужно настроить его для apex, но в нем описаны два имеющихся у вас варианта (либо использование пользовательского дистрибутива, либо простое копирование вашего пользовательского jar правил впапка библиотеки).
После того, как вы интегрировали свои пользовательские правила в свою установку PMD, ваши правила будут доступны при выполнении PMD.
Комментарии:
1. Привет, адангел, у меня есть query..is есть ли какие-либо ограничения для пользовательского имени jar? потому что я добавил к нему название своей компании, и jar не работал … но как только я его удалил .. jar начал работать