简体   繁体   English

我的Maven模块未生成JAR

[英]My Maven Module isn't generating a JAR

I have the following hierarchy: 我具有以下层次结构:

my-app
  \__ pom.xml
  \__ jar-module
        \__ pom.xml
  \__ webapp-module
        \__ pom.xml
  \__ core-module
        \__ pom.xml

Where core-module acts as a library providing common code for webapp-module and jar-module . 其中core-module充当库,为webapp-modulejar-module提供通用代码。

webapp-module works just fine, it's generating a war as expected and the code from core-module is being used. webapp-module工作正常,正在按预期方式产生war ,并且正在使用core-module的代码。

The problem is with jar-module . 问题出在jar-module I have no idea why, but jar-module isn't outputting a jar , even when I select to run (in IntelliJ IDEA) a simple main with a println() it does run, but there's no jar on the target folder. 我不知道为什么,但是jar-module不会输出jar ,即使我选择运行(在IntelliJ IDEA中)带有println()的简单main也可以运行,但是target文件夹上没有jar

How can I solve this and make the jar-module output a jar ? 如何解决这个问题并使jar-module输出jar

I am not very experienced with Maven , my goal is to be able to use the same Jersey code on a local Glassfish and in a jar to be deployed at AWS Lambda Serverless Java Container so I can easily test it locally before deployment. 我对Maven不太熟悉,我的目标是能够在本地Glassfishjar使用相同的Jersey代码,以将其部署在AWS Lambda Serverless Java Container因此我可以在部署之前轻松地在本地对其进行测试。

I would appreciate any corrections on my hierarchy and on pom errors as well. 我希望对我的层次结构以及pom错误进行任何更正。

my-app pom.xml has a packaging of pom , but core-module and jar-module have a packaging of jar and webapp-module has a packaging of war . my-app pom.xml具有pom packaging ,但是core-modulejar-module具有jar packaging ,而webapp-module具有war packaging

here are the POM s: 这是POM

my-app POM : 我的应用程式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.example.myapp</groupId>
    <artifactId>myapp</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>core-module</module>
    </modules>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
</project>

core-module POM: (I also tried it with <packaging>pom</packaging> and no jar skip properties, it didn't work) 核心模块POM :(我也用<packaging>pom</packaging>尝试,并且没有jar skip属性,但没有用)

<?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>
    <parent>
        <artifactId>myapp</artifactId>
        <groupId>com.example.myapp</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>webservice-core</artifactId>
    <packaging>jar</packaging>
    <modules>
        <module>../jar-module</module>
        <module>../webapp-module</module>
    </modules>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.deploy.skip>true</maven.deploy.skip>
        <jar.skipIfEmpty>true</jar.skipIfEmpty>
        <maven.install.skip>true</maven.install.skip>
        <javax-ws-rs-version.version>2.1</javax-ws-rs-version.version>
        <jersey.version>2.26</jersey.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>javax.ws.rs</groupId>
            <artifactId>javax.ws.rs-api</artifactId>
            <version>${javax-ws-rs-version.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-jackson</artifactId>
            <version>${jersey.version}</version>
        </dependency>
    </dependencies>
</project>

webapp-module POM: webapp模块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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>core-module</artifactId>
        <groupId>com.example.myapp</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>webapp-module</artifactId>
    <packaging>war</packaging>
    <name>webapp Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <jersey.version>2.26</jersey.version>
    </properties>
    <dependencies>
        <dependency>
            <artifactId>core-module</artifactId>
            <groupId>com.example.myapp</groupId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>${jersey.version}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    <build>
        <finalName>webapp</finalName>
    </build>
</project>

jar-module POM: jar模块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>
    <parent>
        <artifactId>core-module</artifactId>
        <groupId>com.example.myapp</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>jar-module</artifactId>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <jersey.version>2.26</jersey.version>
        <maven-shade-plugin.version>3.1.0</maven-shade-plugin.version>
    </properties>
    <dependencies>
        <dependency>
            <artifactId>core-module</artifactId>
            <groupId>com.example.myapp</groupId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.amazonaws.serverless</groupId>
            <artifactId>aws-serverless-java-container-jersey</artifactId>
            <version>0.8</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>${maven-shade-plugin.version}</version>
                <configuration>                    <createDependencyReducedPom>false</createDependencyReducedPom>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

my-app is your parent module and rest are child so provide a dependencies order in parent project pom so that when you build the project ,maven will provide the dependencies as you provided in parent module. my-app是您的父模块,其余是子模块,因此请在父项目pom中提供依赖项顺序,以便在构建项目时,maven将像您在父模块中提供的那样提供依赖项。

<modules>
    <module>core-module</module>
</modules>

Provide the proper ordering like parent and child modules to understand the maven for building. 提供正确的顺序(如父模块和子模块)以了解要构建的Maven。

my-app 我的应用

<modules>
    <module>core-module</module>
    <module>jar-module</module>
    <module>web-module</module>
</modules>

core-module 核心模块

no <modules>

This is a clean hierarchy, mirrored by the directory hierarchy. 这是一个干净的层次结构,由目录层次结构镜像。

There is a difference between module s and there container and the parent relation, and other subtleties. module s与there容器, parent关系和其他细微之处有所不同。 So maybe this helps. 所以也许这有帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM