У меня та же проблема, и я немного ее диагностировал, и у меня появился ужасный обходной путь, который не идеален.
В моем файле persistence.xml есть два модуля персистентности: один для тестирования и один для фактической сборки.
Причина, по которой я это делаю, заключается в том, что если я использую предпочтительный метод помещения другого файла persistence.xml в папку src / tests / resources / META-INF, тесты не пройдут, потому что сгенерированные классы помещаются в целевой / сгенерированный -sources / test-annotations и не попадают в нужное место в пути к классам после компиляции.
Проблема заключается в том, что если для обоих "exclude-unlisted-classes" установлено значение true, компилятор javac пытается воссоздать классы аннотаций во время компиляции: компилируется и, конечно, происходит сбой на втором PU, поскольку классы уже были создано.
Таким образом, чтобы заставить это работать, я установил "exclude-unlisted-classes" в false для одного из PU, который возвращает меня к сгенерированным мета-классам, и тесты не выполняются (потому что PU не включает требуемый лица).
Затем я возвращаю флаг в значение true и снова запускаю сборку. Поскольку классы уже скомпилированы, compile: compile не запускается, и тесты могут быть успешными.
Временное решение: proc: нет аргументов компилятора javac, как описано здесь: http://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<compilerArguments>
<endorseddirs>${endorsed.dir}</endorseddirs>
<proc:none/>
<Xlint/>
<Xlint:-path/>
<verbose />
</compilerArguments>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>