使用Java和Scala源代码打包WAR文件

3
我想问你一个简单的问题。是否有可能打包WAR文件,其中包含来自不同源目录(src/main/java/... 和 src/main/scala/...)的Scala和Java源代码?当然,我仍然希望将其他资源,如图像和静态页面,包含到生成的WAR中。
我一直在研究WAR插件的功能,特别是关于额外来源方面的内容,但在这方面我没有找到任何有用的东西。是否有人能给我一个提示,在哪里寻找解决方案或任何形式的帮助?
谢谢, 马修
1个回答

2

这是我在多语言项目中使用的POM文件的简化版本。

<?xml version="1.0" encoding="UTF-8"?>
<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>com.sksamuel</groupId>
    <artifactId>test</artifactId>
    <version>0.33-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <maven.plugin.jar.version>2.4</maven.plugin.jar.version>
        <maven.plugin.war.version>2.3</maven.plugin.war.version>
        <maven.plugin.resources.version>2.6</maven.plugin.resources.version>
        <maven.plugin.compiler.version>3.1</maven.plugin.compiler.version>
        <maven.plugin.surefire.version>2.14.1</maven.plugin.surefire.version>
        <maven.plugin.dependency.version>2.4</maven.plugin.dependency.version>
        <maven.plugin.scala.version>3.1.5</maven.plugin.scala.version>

        <compiler.version.source>1.7</compiler.version.source>
        <compiler.version.target>1.7</compiler.version.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.10.2</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>${maven.plugin.war.version}</version>
                </plugin>
                <plugin>
                    <groupId>net.alchim31.maven</groupId>
                    <artifactId>scala-maven-plugin</artifactId>
                    <version>${maven.plugin.scala.version}</version>
                    <executions>
                        <execution>
                            <id>scala-compile-first</id>
                            <phase>process-resources</phase>
                            <goals>
                                <goal>add-source</goal>
                                <goal>compile</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>scala-test-compile</id>
                            <phase>process-test-resources</phase>
                            <goals>
                                <goal>testCompile</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

在该目录中运行mvn clean package后,src/main/scala中有一个Scala源文件和src/main/java中有一个Java源文件,这就是我得到的结果。正如您所看到的,Scala和Java文件都已编译为war包。
$ find .
.
./pom.xml
./target
./target/test
./target/test/WEB-INF
./target/test/WEB-INF/lib
./target/test/WEB-INF/lib/scala-library-2.10.2.jar
./target/test/WEB-INF/classes
./target/test/WEB-INF/classes/ILoveJava.class
./target/test/WEB-INF/classes/ILoveScala$.class
./target/test/WEB-INF/classes/ILoveScala.class
./target/test/WEB-INF/web.xml
./target/test/META-INF
./target/classes.-1172594870.timestamp
./target/maven-archiver
./target/maven-archiver/pom.properties
./target/test.war
./target/classes
./target/classes/ILoveJava.class
./target/classes/ILoveScala$.class
./target/classes/ILoveScala.class
./target/surefire
./src
./src/main
./src/main/webapp
./src/main/webapp/WEB-INF
./src/main/webapp/WEB-INF/web.xml
./src/main/java
./src/main/java/ILoveJava.java
./src/main/scala
./src/main/scala/ilovescala.scala

嗨,谢谢您的回答,但对我不起作用。我尝试了与您相同的scala-maven-plugin配置,但我的java源代码没有编译并打包成生成的WAR文件。您能否发布一下您WAS插件的配置?我想解决方案可能就在那里。 - Martinecko
尽管那个pom是我日常使用的“真正的”pom的简化版本,但在发布之前我已经进行了测试,并且文件列表是运行mvn clean package后的实际文件列表。.war文件也包含了应有的内容。 - sksamuel
我建议您像我一样设置,创建两个虚拟文件 - 一个Scala源文件,一个Java源文件,然后使用我的pom文件。然后从反向工作开始找出您的设置中哪些会破坏它。 - sksamuel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接