将项目中的特定文件导出到maven本地仓库
Export a specific file in project to maven local repository
我有一个 Grunt 项目,它在其构建文件夹中构建一个 zip。
为了分发此 zip,我已将其转换为 Maven 项目并将此 zip 复制到 maven 目标文件夹中。
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<!-- here the phase you need -->
<phase>install</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target</outputDirectory>
<resources>
<resource>
<directory>build</directory>
<includes>
<include>*.zip</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
但是这个 zip 文件没有复制到我的本地 maven 存储库。
是否有配置或插件允许我指定 maven repo 文件夹的内容?
已更新:
项目结构:
myproject
|_ pom.xml
|_ build
|_ dist
|_ myproject.js
|_ myproject.css
|_ libs/
我要压缩的目录是:/build/dist/
使用的描述符:
<assembly>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>build/dist</directory>
<includes>
<include>**/*</include>
</includes>
</fileSet>
</fileSets>
</assembly>
生成的 zip 如下:
myproject-1.0.0.zip
|_ build
|_ dist
|_ myproject.js
|_ myproject.css
|_ libs/
我的要求是:
myproject.zip
|_ myproject.js
|_ myproject.css
|_ libs/
1。 zip 名称 = "myproject.zip" 而不是 "myproject-1.0.0.zip"
2. 放弃中间文件结构 build/dist.
But this zip file is not copied to my local maven repository.
Maven 存储库的目的不是存储单个文件,而是构建过程的结果(jar、war、pom)。
如果你想构建一个包含你的程序和一些资源作为目录结构的 zip(logging-dir、tmp-dir、config-dir,...),你可以使用 maven-assembly-plugin . Here is an example .
更新 1
这是我自己的一个例子。看一下 <outputDirectory>
个元素。
这是程序集描述符myAppDescriptor.xml:
<assembly>
<id>myAppAssembly</id>
<formats>
<format>zip</format>
</formats>
<baseDirectory>${project.build}/${artifactId}-${version}</baseDirectory>
<includeBaseDirectory>false</includeBaseDirectory>
<!-- Adds dependencies to assembly under lib directory -->
<dependencySets>
<dependencySet>
<useProjectArtifact>false</useProjectArtifact>
<outputDirectory>lib</outputDirectory>
<unpack>false</unpack>
</dependencySet>
</dependencySets>
<fileSets>
<!--
Adds startup scripts to the root directory of zip package. The startup
scripts are located to src/main/scripts directory as stated by Maven
conventions.
-->
<!-- adds jar package to the root directory of zip package -->
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
<excludes>
<exclude>*source*</exclude>
</excludes>
</fileSet>
<fileSet>
<directory>${project.build.scriptSourceDirectory}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.cmd</include>
</includes>
<filtered>true</filtered>
</fileSet>
<fileSet>
<directory>${project.build.scriptSourceDirectory}/config</directory>
<outputDirectory>/config</outputDirectory>
<filtered>true</filtered>
</fileSet>
<fileSet>
<directory>${project.build.scriptSourceDirectory}/log</directory>
<excludes>
<exclude>*.*</exclude>
</excludes>
<outputDirectory>/log</outputDirectory>
</fileSet>
<fileSet>
<directory>${project.build.scriptSourceDirectory}/sql</directory>
<outputDirectory>/sql</outputDirectory>
</fileSet>
<fileSet>
<directory>${project.build.scriptSourceDirectory}/mailing</directory>
<excludes>
<exclude>*</exclude>
</excludes>
<outputDirectory>/mailing</outputDirectory>
</fileSet>
<fileSet>
<directory>${project.build.scriptSourceDirectory}/tmp</directory>
<outputDirectory>/tmp</outputDirectory>
</fileSet>
</fileSets>
</assembly>
这是 pom.xml:
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<grpoupId>com.enterprise</grpoupId>
<artifactId>MyApp</artifactId>
<version>0.6.1</version>
<packaging>jar</packaging>
<name>MyApp</name>
<url>http://www.enterprise.com</url>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>src/main/assembly/myAppDescriptor.xml</descriptor>
</descriptors>
<finalName>MyApp</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.5</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.enterprise.MyApp</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<!-- your dependencies -->
</dependencies>
</project>
zip 具有以下结构:
Myapp.zip
|__ config
|__ lib
|__ log
|__ mailing
|__ sql
|__ tmp
myApp-0.6.1.jar
myApp.cmd
更新 2:
关于将 zip 部署到存储库的要求:
Structure of project:
myproject
|_ pom.xml
|_ build
|_ dist
|_ myproject.js
|_ myproject.css
|_ libs/
我不熟悉 JavaScript 与 Maven 的结合,但我认为项目布局应该类似于这样:
myproject
|_ pom.xml
|_ src
|_ main
|_ webapp
*your js and css files here ???*
|_ target
|_ ...
默认情况下,名为 "build" 的目录不被 maven 识别为源目录。目录 target
是在 maven 执行期间创建的。
另一种解决方案可能是将目录 build
配置为 build
部分中 pom.xml 中的源目录:
<build>
...
<sourceDirectory>build</sourceDirectory>
...
</build>
看看 maven standard directory layout ,并将这些信息与有关 "maven and JavaScript".
的一些研究相结合
然后应该可以通过 mvn install
或 mvn deploy
生成一个 zip 并将其部署到任何存储库。
我有一个 Grunt 项目,它在其构建文件夹中构建一个 zip。 为了分发此 zip,我已将其转换为 Maven 项目并将此 zip 复制到 maven 目标文件夹中。
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<!-- here the phase you need -->
<phase>install</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target</outputDirectory>
<resources>
<resource>
<directory>build</directory>
<includes>
<include>*.zip</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
但是这个 zip 文件没有复制到我的本地 maven 存储库。 是否有配置或插件允许我指定 maven repo 文件夹的内容?
已更新:
项目结构:
myproject
|_ pom.xml
|_ build
|_ dist
|_ myproject.js
|_ myproject.css
|_ libs/
我要压缩的目录是:/build/dist/
使用的描述符:
<assembly>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>build/dist</directory>
<includes>
<include>**/*</include>
</includes>
</fileSet>
</fileSets>
</assembly>
生成的 zip 如下:
myproject-1.0.0.zip
|_ build
|_ dist
|_ myproject.js
|_ myproject.css
|_ libs/
我的要求是:
myproject.zip
|_ myproject.js
|_ myproject.css
|_ libs/
1。 zip 名称 = "myproject.zip" 而不是 "myproject-1.0.0.zip"
2. 放弃中间文件结构 build/dist.
But this zip file is not copied to my local maven repository.
Maven 存储库的目的不是存储单个文件,而是构建过程的结果(jar、war、pom)。
如果你想构建一个包含你的程序和一些资源作为目录结构的 zip(logging-dir、tmp-dir、config-dir,...),你可以使用 maven-assembly-plugin . Here is an example .
更新 1
这是我自己的一个例子。看一下 <outputDirectory>
个元素。
这是程序集描述符myAppDescriptor.xml:
<assembly>
<id>myAppAssembly</id>
<formats>
<format>zip</format>
</formats>
<baseDirectory>${project.build}/${artifactId}-${version}</baseDirectory>
<includeBaseDirectory>false</includeBaseDirectory>
<!-- Adds dependencies to assembly under lib directory -->
<dependencySets>
<dependencySet>
<useProjectArtifact>false</useProjectArtifact>
<outputDirectory>lib</outputDirectory>
<unpack>false</unpack>
</dependencySet>
</dependencySets>
<fileSets>
<!--
Adds startup scripts to the root directory of zip package. The startup
scripts are located to src/main/scripts directory as stated by Maven
conventions.
-->
<!-- adds jar package to the root directory of zip package -->
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
<excludes>
<exclude>*source*</exclude>
</excludes>
</fileSet>
<fileSet>
<directory>${project.build.scriptSourceDirectory}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.cmd</include>
</includes>
<filtered>true</filtered>
</fileSet>
<fileSet>
<directory>${project.build.scriptSourceDirectory}/config</directory>
<outputDirectory>/config</outputDirectory>
<filtered>true</filtered>
</fileSet>
<fileSet>
<directory>${project.build.scriptSourceDirectory}/log</directory>
<excludes>
<exclude>*.*</exclude>
</excludes>
<outputDirectory>/log</outputDirectory>
</fileSet>
<fileSet>
<directory>${project.build.scriptSourceDirectory}/sql</directory>
<outputDirectory>/sql</outputDirectory>
</fileSet>
<fileSet>
<directory>${project.build.scriptSourceDirectory}/mailing</directory>
<excludes>
<exclude>*</exclude>
</excludes>
<outputDirectory>/mailing</outputDirectory>
</fileSet>
<fileSet>
<directory>${project.build.scriptSourceDirectory}/tmp</directory>
<outputDirectory>/tmp</outputDirectory>
</fileSet>
</fileSets>
</assembly>
这是 pom.xml:
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<grpoupId>com.enterprise</grpoupId>
<artifactId>MyApp</artifactId>
<version>0.6.1</version>
<packaging>jar</packaging>
<name>MyApp</name>
<url>http://www.enterprise.com</url>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>src/main/assembly/myAppDescriptor.xml</descriptor>
</descriptors>
<finalName>MyApp</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.5</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.enterprise.MyApp</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<!-- your dependencies -->
</dependencies>
</project>
zip 具有以下结构:
Myapp.zip
|__ config
|__ lib
|__ log
|__ mailing
|__ sql
|__ tmp
myApp-0.6.1.jar
myApp.cmd
更新 2: 关于将 zip 部署到存储库的要求:
Structure of project:
myproject |_ pom.xml |_ build |_ dist |_ myproject.js |_ myproject.css |_ libs/
我不熟悉 JavaScript 与 Maven 的结合,但我认为项目布局应该类似于这样:
myproject
|_ pom.xml
|_ src
|_ main
|_ webapp
*your js and css files here ???*
|_ target
|_ ...
默认情况下,名为 "build" 的目录不被 maven 识别为源目录。目录 target
是在 maven 执行期间创建的。
另一种解决方案可能是将目录 build
配置为 build
部分中 pom.xml 中的源目录:
<build>
...
<sourceDirectory>build</sourceDirectory>
...
</build>
看看 maven standard directory layout ,并将这些信息与有关 "maven and JavaScript".
的一些研究相结合然后应该可以通过 mvn install
或 mvn deploy
生成一个 zip 并将其部署到任何存储库。