2013-09-05 3 views
3

Я пишу библиотеку, которая создаст отчет на основе результатов теста (представьте себе что-то вроде Surefire). И моя проблема заключается в том, что я могу создать папку в каталоге target/ для хранения отчета, а также скопировать туда необходимые файлы, но я могу это сделать только тогда, когда я сам создаю проект библиотеки.Как создать новый каталог в целевой папке с Maven

Я хотел бы достичь такого же поведения, как плагин Surefire, это означает, что если я добавлю зависимость для моей библиотеки к некоторому проекту, скажем myProject, то после сборки я получу что-то вроде myProject/target/myLibrary.

Кстати, это то, что я в настоящее время

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.7</version> 
     <executions> 
      <execution> 
       <phase>generate-test-sources</phase> 
       <configuration> 
        <tasks> 
         <echo message="Creating folder for the lib..." /> 
         <mkdir dir="${report.folder}" /> 
         <echo message="Copying Twitter Bootstrap libraries to the ${report.folder}" /> 
         <copy todir="${report.folder}"> 
           <fileset dir="src/main/resources/bootstrap"> 
            <include name="**/**" /> 
           </fileset> 
          </copy> 
         </tasks> 
        </configuration> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

А также бонусный вопрос, существует ли переменная для src/main/resources?

+0

Вы смотрели на код для [Surefire плагин] (http://maven.apache.org/surefire/maven-surefire-plugin/source-repository.html)? – user944849

+1

Я сделал, но я ничего не нашел –

+0

Я думаю, что термин «библиотека» здесь запутан, потому что вы не можете выполнить библиотеку, но она * используется * чем-то. Как вы хотите выполнить этот кусок кода? Как исполняемый банку? Как вы его запускаете прямо сейчас? –

ответ

2

Хорошо, поэтому я нашел решение, которое использует метод getResourceAsStream().

String classpathName = "/bootstrap/" + "css" + "/" + file; 
InputStream inputStream = SetupReportDirectory.class.getResourceAsStream(classpathName); 
String path = "target/myLibrary/bootstrap"; 
FileOutputStream outputStream = new FileOutputStream(path); 
IOUtils.copy(inputStream, outputStream); 
0

В вашей библиотеке просто проверьте, существует ли каталог target (и/или какой-либо другой подкаталог). Если он не просто использует File.mkdirs(...) и создает его. Это то, что делает maven-surefire-plugin.

+0

Да, это работает, но мне также нужно для копирования файлов. И если я делаю «FileUtils.copyDirectoryToDirectory» (новый файл («src/main/resources/bootstrap»), новый файл («target/myLibrary»), то я получу «FileNotFoundException» - в проекте не существует загрузочного файла, использует библиотеку –

+0

Ну, очевидно, вам сначала нужно проверить, существует ли каталог 'target' и создать его, если это не так. Затем вы можете выполнить копирование с использованием соответствующего метода из класса FileUtils. – carlspring

+0

Да, но этот каталог существует, потому что я выполняю команду 'new File (« target/myLibrary »). mkdir();' перед этим. Поэтому я думаю, проблема заключается в том, что 'src/main/resources/bootstrap' на данный момент не находится в classpath. –

Смежные вопросы