Проблема PMD как исключение нулевого указателя

#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 начал работать