我有一个ant构建,它只生成一个装满html页面的jar。我想和马文做同样的事。我目前正在将这些文件复制到一个新的文件夹中,但这些文件并没有被添加到最终的jar中。当我运行命令jar tf mavenjar.jar
时,我看不到终端中列出的文件。看起来是这样的:单击此处
当我在ant生产的jar上运行相同的命令时,我会看到以下内容:单击此处这是我的pom
<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>
<groupId>try1</groupId>
<artifactId>try1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
</plugin>
</plugins>
<finalName>mavenjar</finalName>
<resources>
<resource>
<directory>${basedir}/moveTheseFiles</directory>
<targetPath>${basedir}/newFileLocation</targetPath>
<filtering>false</filtering>
</resource>
</resources>
</build>
</project>
知道我可能缺少什么吗?把移动的文件包括到jar中?
有两种方法可以实现这一点。遵循配置公约-或配置它。
配置上的约定
将静态文件复制到jar中最简单的方法是使用默认文件夹src/main/resources
。您在那里添加的所有文件都将添加到您的jar文件中。你的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>
<groupId>try1</groupId>
<artifactId>try1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<finalName>mavenjar</finalName>
</build>
</project>
非默认文件夹
当您确实需要将文件放在另一个文件夹中时,您的配置几乎可以。只是缺少includes
部分。您必须告诉maven将所有文件都包含在指定的文件夹中。
<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>
<groupId>try1</groupId>
<artifactId>try1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<finalName>mavenjar</finalName>
<resources>
<resource>
<directory>moveTheseFiles</directory>
<includes>
<include>**/*</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
</project>
注意:似乎您想要创建一个web应用程序。也许您想创建一个war
文件。为了实现这一点,您可以简单地设置
<packaging>war</packaging>
然后所有的web资产(HTML页面、CSS…(都应该位于src/main/webapp
下,并将被复制到war的根文件夹中。请注意,在由此产生的战争中,src/main/resources
中的文件将被复制到WEB-INF/classes
。
我实际上是按照这个解决方案完成的:在maven中创建zip,在jar 旁边添加其他文件
我在src/main/assembly这个位置创建了一个bin.xml文件。bin.xml看起来像这个
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>bin</id>
<baseDirectory>/</baseDirectory>
<formats>
<format>jar</format>
</formats>
<fileSets>
<fileSet>
<directory>${basedir}/dist/newLocation</directory>
<outputDirectory>/</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>
<groupId>try1</groupId>
<artifactId>try1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<finalName>mavenjar</finalName>
<resources>
<resource>
<directory>${basedir}/WWW</directory>
<targetPath>${basedir}/dist/newLocation</targetPath>
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/bin.xml</descriptor>
</descriptors>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- append to the packaging phase. -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
在终端中,我运行
mvn clean package
cd target
jar tf mavenjar.jar
输出看起来像这样点击这里