【问题标题】:Packaging WAR with Java and Scala sources使用 Java 和 Scala 源打包 WAR
【发布时间】:2013-06-20 07:45:01
【问题描述】:

我想问你一个简单的问题。是否可以打包包含 Scala 和 Java 源的 WAR 文件,每个源都来自单独的源目录(src/main/java/... 和 src/main/scala/...)?当然,我仍然喜欢在生成的 WAR 中包含其他资源,例如图像和静态页面。

我一直在研究关于其他资源的 WAR 插件功能,但在这方面我没有发现任何有用的东西。谁能给我一个提示,我应该在哪里寻找解决方案,或者任何形式的帮助?

谢谢, 马修

【问题讨论】:

    标签: scala jakarta-ee maven-3 war maven-plugin


    【解决方案1】:

    这是我用于多语言项目的 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 文件都已编译到战争中。

    $ 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 插件的配置吗?我认为解决方案可能就在那里。
    • 虽然 pom 是我日常使用的“真实”的精简版,但我在发布之前对其进行了测试,文件列表是运行 mvn clean package 后的实际文件列表。 .war 文件还包含应有的内容。
    • 我建议你像我一样进行设置,像我一样创建 2 个虚拟文件 - 一个 scala 源,一个 java 源,然后使用我的 pom。然后向后工作,找出你的设置中有什么破坏了它。
    猜你喜欢
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 2011-04-26
    • 1970-01-01
    相关资源
    最近更新 更多