Java EE / Maven - 将WEB-INF文件夹打包成多个战争

时间:2016-07-08 12:32:44

标签: maven java-ee maven-3

我有一个使用Maven打包为EAR的Java EE项目,它包含以下结构的两个WAR模块(一个web one mobile):

getwd()
setwd("C:/Users/Dev/Desktop/Joe")

library(xlsx)
library(rJava)
library(xlsxjars)

#get file names
f = list.files("./")
#read files
dat = lapply(f, function(i){
  x = read.xlsx(i, sheetIndex = 1, sheetName = NULL, startRow = 24,
                endRow = NULL, as.data.frame = TRUE, header = FALSE)
  #return columns with names and colors
  x = x[, c(1, 2, 3, 4), drop=FALSE] 
  #return the data
  x
})

library(plyr)
df1 <- ldply(dat, data.frame) ## convert list into a dataframe

#remove NA's
complete.cases(df1)
x <- df1[complete.cases(df1),]
str(x)

#show only rows that start with numbers or 1 letter and then numbers
df <-df1[grepl("^[0-9]|^[a-zA-Z][0-9].*", df1$X1), ]
print(df)

pth <- "C:/Users/Dev/Desktop/Joe/"

# Iterate within each row of df
for(i in 1:nrow(df)){
  # Create 1st path
  dir.create(paste0(pth , df$X1[i]))
  # Create 2nd and 3rd paths
  dir.create(paste0(pth, df$X1[i], "/",df$X2[i]))
  dir.create(paste0(pth, df$X1[i], "/",df$X3[i]))
  dir.create(paste0(pth, df$X1[i], "/",df$X4[i]))
 
  # write data.frame row as txt
  write.table(df[i, ], file=paste0(pth, df$X1[i], "/", df$X1[i],".txt"), sep=";")
}

我在Web.war / WEB-INF中有一个目录,其中包含两个.wars共有的.xhtml文件

有没有办法指示Maven在构建期间自动将此目录复制到另一个.war中?

例如。我想..

EAR
    -Entities.jar
    -EJB.jar
    -Test.jar
    -Web.war
    -Mobile.war

构建成

WebApp-Web/src/main/webapp/WEB-INF/emails/*

WebApp/WebApp-web/WEB-INF/emails

(我正在使用WebApp/WebApp-mobile/WEB-INF/emails btw)

2 个答案:

答案 0 :(得分:2)

如果将共享资源添加到“父项目”(或其他地方),则可以在maven-war-plugin的webResources标记中定义相对路径(对于两个Web项目):

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <webResources>
            <resource>
                <directory>../src/main/resources</directory>
                <targetPath>WEB-INF</targetPath>
            </resource>
        </webResources>
    </configuration>
</plugin>

另一种方法是使用maven-resources-plugin在构建时从相对路径复制文件,但我相信maven-war-plugin方法更好。

使用maven-resources-plugin :(来源how-to-get-a-war-package-with-resources-copied-in-web-inf) 我只更改了目录,使其相对于其父目录(即:../src/main/resource

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.4.2</version>
    <executions>
      <execution>
        <id>default-copy-resources</id>
        <phase>process-resources</phase>
        <goals>
          <goal>copy-resources</goal>
        </goals>
        <configuration>
          <overwrite>true</overwrite>
          <outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}/WEB-INF/</outputDirectory>
          <resources>
            <resource>
              <directory>../src/main/resources</directory>
            </resource>
          </resources>
        </configuration>
      </execution>
    </executions>
  </plugin>

答案 1 :(得分:1)

如果您正在使用实现Servlet 3.0或更新版本的Web容器,那么您可以利用Web片段功能将这些公共文件构建到一个jar文件中,该文件将添加到每个文件的WEB-INF / lib目录中Web应用程序。

通过将诸如xhtml文件之类的Web资源放在jar文件的META-INF / resources目录中,使其可用。可能与这些xhtml文件关联的任何web.xml配置都可以放在META-INF / web-fragment.xml文件中。