Некоторые модульные тесты в моем приложении связаны с поиском и управлением определенными файловыми ресурсами, которые являются частью самого приложения. Мне нужно, чтобы эти тесты выполнялись в реальной производственной среде приложения, где оно развернуто в виде файла JAR, а не в виде развернутого каталога.
Как я могу поручить Maven выполнять мои модульные тесты, рассматривая в качестве пути к классам сгенерированный проектом файл jar (и любые другие объявленные зависимости библиотеки) вместо скомпилированных классов в файловой системе, как это делается по умолчанию?
Другими словами, прямо сейчас для моих модульных тестов задан путь к классам: /$PROJECTPATH/target/classes/
.
Вместо этого я бы хотел, чтобы этот путь к классам был установлен на: /$PROJECTPATH/target/myjarfile.jar
.
Я пытался вручную добавлять и удалять классы зависимостей, как описано здесь: http://maven.apache.org/plugins/maven-surefire-plugin/examples/configuring-classpath.html, но до сих пор это не работает.
Мой текущий проект POM выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.mygroupid</groupId>
<artifactId>myartifact</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
...
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.2</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.4</version>
<configuration>
<includeScope>runtime</includeScope>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>process-resources</phase>
<!-- <phase>package</phase> -->
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.3</version>
<configuration>
<classpathDependencyExcludes>
<classpathDependencyExclude>
${project.build.outputDirectory}
</classpathDependencyExclude>
</classpathDependencyExcludes>
<additionalClasspathElements>
<additionalClasspathElement>
${project.build.directory}/${project.build.finalName}.${project.packaging}
</additionalClasspathElement>
</additionalClasspathElements>
</configuration>
</plugin>
</plugins>
</build>
</project>
Заранее благодарю за любую помощь!.
groupId:artifactId
. Это может сработать, если вы установите параметр конфигурации плагинаclassesDirectory
, который по умолчанию равен ${project.build.outputDirectory}, для какого-то другого несуществующего каталога, чтобы ваш каталог классов не был включен в путь к классам. 31.08.2012