Получение кода для моего приложения с использованием JavaCalc JavaCalc на Tomcat

Я хочу измерить охват кода интеграционных тестов, используя JaCoCo и инструменты Sonar.

Для этого я запускаю Tomcat 5.5, настроенный агентом JaCoCo, чтобы получить файл дампа от JaCoCo.

Таким образом, я устанавливаю для этого JAVA_OPTS:

set JAVA_OPTS=-Xrs -XX:MaxPermSize=256m -XX:PermSize=256m -XX:NewRatio=3 -Xms512m -Xmx1024m -XX:+UseParallelGC -javaagent:C:\dev\servers\jacoco-agent.jar=destfile=C:\dev\servers\jacoco.exec,append=true,includes=my.application.*

Когда я запускаю Tomcat, создается файл C:\dev\servers\jacoco.exec, но данные не заполняются.

Что-то я забыл в конфигурации моего сервера?

С уважением.

Ответ 1

Насколько я помню - файл будет заполнен во время отключения Tomcat.

Ответ 2

Я понимаю, что это может быть не вариант 2 года назад, когда этот вопрос задавали, но в настоящее время у вас есть другие возможности для получения данных о выполнении JaCoCo без отключения Tomcat (или любой JVM, оснащенной Java Java-агентом JaCoCo).

Сначала взгляните на текущую документацию для Java-агента JaCoCo: http://www.eclemma.org/jacoco/trunk/doc/agent.html

Вы можете использовать параметр output = tcpserver для агента JaCoCo, чтобы агент Java прослушивал команды. Вы можете установить адрес = *, чтобы прослушивать tcpserver на всех интерфейсах, и вы можете установить аргумент port = 6300 для выбора порта, в котором должен прослушиваться tcpserver.

Через tcpserver java-агент JaCoCo может быть проинструктирован отправлять вам данные всякий раз, когда вы его запрашиваете.

Если ваша JVM в настоящее время подвергает JMX, у вас есть еще один вариант, который вы можете использовать, не открывая дополнительные порты. Установив jmx = true, java-агент JaCoCo предоставляет MBean, с которым вы можете взаимодействовать.

Если вы используете maven, вы можете взглянуть на недавно созданный плагин, чтобы собирать данные JaCoCo из удаленной JVM во время работы. Проект для плагина находится по адресу:
https://github.com/mattcj/jacocotogo

Ответ 3

Помимо решения maven, вы также можете рассмотреть https://www.eclemma.org/jacoco/trunk/doc/cli.html

По сути, вы запускаете свою службу на удаленной машине с опцией javaagent, например (вы можете изменить номер порта и опустить include, если вы хотите иметь покрытие для всех классов):

-javaagent: /tmp/jacocoagent.jar=port=36320,destfile=jacoco-it.exec,output=tcpserver,includes=abcd*"

Затем подключитесь к удаленному компьютеру, указав адрес удаленного хоста, или откройте туннель для удаленного компьютера. В следующем примере предполагается, что я настроил переадресацию портов между локальным хостом 36320 и удаленным хостом 36320

java -jar jacococli.jar dump --port 36320 --destfile/tmp/jacoco-it.exec

Если у вас есть несколько файлов.exec, вам нужно объединить их:

java -jar jacococli.jar merge/tmp/jacoco-it-1.exec/tmp/jacoco-it-2.exec --destfile/tmp/merge

Затем сгенерируйте отчет html (path1 может быть путем к файлу jar или папке файлов класса)

java -jar jacococli.jar report/tmp/jacoco-it.exec --classfiles path1 --sourcefiles path2 --html/tmp/report