2016-01-13 2 views
9

Я буду использовать зависимость maven com.samaxes.maven # minify-maven-plugin, чтобы минимизировать мой проект frontend. Этот frontend-проект упакован в банку (java-архив), поэтому у меня нет файла войны, потому что я использую Spring boot.Поместите мини-файлы в банку

С конфигурацией внизу * .min.js и * .min.css создаются файлы, но они не передаются в файл jar. Я прочитал несколько потоков, и я пробовал что-то, но не безуспешно: в JAR-файле все еще есть unminified css и js-файлы.

Есть ли у кого-нибудь намек на то, что я могу сделать. У меня есть много css и js-файлов в моем проекте в разных структурах папок, и мини-файлы должны быть размещены в том же месте, что и unminified.

<build> 
<plugins> 
    <plugin> 
    <groupId>com.samaxes.maven</groupId> 
    <artifactId>minify-maven-plugin</artifactId> 
    <version>1.7.4</version> 
    <executions> 
     <execution> 
     <id>default-minify</id> 
     <phase>package</phase> 
     <configuration> 
      <charset>UTF-8</charset> 
      <skipMerge>true</skipMerge> 
      <nosuffix>true</nosuffix> 
      <closureCompilationLevel>WHITESPACE_ONLY</closureCompilationLevel> 
      <webappSourceDir>src/main/resources</webappSourceDir> 
      <cssSourceDir>./</cssSourceDir> 
      <cssTargetDir>./minified</cssTargetDir> 
      <cssSourceIncludes> 
      <cssSourceInclude>**/*.css</cssSourceInclude> 
      </cssSourceIncludes> 
      <cssSourceExcludes> 
      <cssSourceExclude>**/*.min.css</cssSourceExclude> 
      </cssSourceExcludes> 
      <jsSourceIncludes> 
      <jsSourceInclude>**/*.js</jsSourceInclude> 
      </jsSourceIncludes> 
      <jsSourceExcludes> 
      <jsSourceExclude>**/*.min.js</jsSourceExclude> 
      </jsSourceExcludes> 
      <jsEngine>CLOSURE</jsEngine> 
     </configuration> 
     <goals> 
      <goal>minify</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
</plugins> 

[EDIT]

У меня есть редактировать плагин Maven таким образом. Мне действительно нужно использовать src/main/recoures - это спецификация в нашем проекте.

Моя проблема сейчас в том, что файлы в разных папках под вкладку под основным путем к папке общественности/приложение являются уменьшенными НО папки с файлами уменьшенными находятся на тот же уровень, чем моя общественной папки.

Так мне нужно что-то вроде этого:

<webappTargetDir>**public/app/**${project.build.outputDirectory}</webappTargetDir> 

Есть ли возможность сделать это, как это?

<build> 
<plugins> 
    <plugin> 
    <groupId>com.samaxes.maven</groupId> 
    <artifactId>minify-maven-plugin</artifactId> 
    <version>1.7.4</version> 
    <executions> 
     <execution> 
     <id>default-minify</id> 
     <phase>prepare-package</phase><!-- When omitted defaults to 'process-resources' --> 
     <configuration> 
      <charset>UTF-8</charset> 
      <skipMerge>true</skipMerge> 
      <closureCompilationLevel>WHITESPACE_ONLY</closureCompilationLevel> 
      <webappSourceDir>src/main/resources/public/app</webappSourceDir> 
      <webappTargetDir>${project.build.outputDirectory}</webappTargetDir> 
      <cssSourceDir>./</cssSourceDir> 
      <cssSourceIncludes> 
      <cssSourceInclude>**/*.css</cssSourceInclude> 
      </cssSourceIncludes> 
      <jsSourceDir>./</jsSourceDir> 
      <jsSourceIncludes> 
      <jsSourceInclude>**/*.js</jsSourceInclude> 
      </jsSourceIncludes> 
      <jsEngine>CLOSURE</jsEngine> 
     </configuration> 
     <goals> 
      <goal>minify</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 

С преуменьшать-Maven-плагин конфигурации выше я получаю следующую структуру папок на левой стороне, но я должен был бы структуру папок на правой стороне стороне. Есть ли возможность сделать это?

Current and needed folder structure

+0

Сначала вы должны изменить фазу преуменьшать плагин для 'подготовить-package' Кроме того, вы не должны используйте 'src/main/resources' и измените' webappTargetDir' на '$ {project.build.outputDirectory}' (папка target/classes) ...... Если вы используете папку 'src/main/resources', которая копируется во время фазы ресурсов в «цель/классы», которая на самом деле не то, что вы хотите .... – khmarbaise

+0

Спасибо за ответ. есть ли возможность поместить мини-файлы, где находится исходный путь к файлу? Большое спасибо! – quma

+1

Что делать, если вы попробуете ' $ {project.build.outputDirectory}/public/app'? – Tunaki

ответ

8

Файлы копируются относительно из webappSourceDir в webappTargetDir. Поэтому, если вы хотите, чтобы структура соответствовала, вы должны использовать аналогичные шаблоны для них. Значение, оно должно быть

<webappSourceDir>src/main/resources</webappSourceDir> 
<webappTargetDir>${project.build.outputDirectory}</webappTargetDir> 

или

<webappSourceDir>src/main/resources/public/app</webappSourceDir> 
<webappTargetDir>${project.build.outputDirectory}/public/app</webappTargetDir> 

Я совершил рабочему пример here

+0

Большое спасибо! У меня возник бы еще один вопрос. Как я могу предотвратить упаковку недоминированных файлов в банку. – quma

+0

Если у них одно и то же имя, они будут переписаны с помощью minifier. Если у них есть другое имя, вам придется исключить их с помощью обычного механизма исключения ресурсов: https://maven.apache.org/plugins/maven-resources-plugin/examples/include-exclude.html. –