Jar 不包含我的类文件 gitlab-ci

Posted

技术标签:

【中文标题】Jar 不包含我的类文件 gitlab-ci【英文标题】:Jar doesn't contain my class files gitlab-ci 【发布时间】:2020-04-21 09:28:35 【问题描述】:

在 gitlab-ci 中构建 spring boot 应用时,组装好的 jar 没有项目 .class 文件,但有 spring 的 .properties 文件。 在我的 PC 上,jar 包含所有文件并完美运行。

例如用于 BOOT-INF 的 gitlab-ci jar 结构:

application.properties

我用于 BOOT-INF 的 pc jar 结构:

com 项目 (其他文件夹) application.properties

pom.xml:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.2.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.project</groupId>
<artifactId>project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>project</name>
<description>Demo project for Spring Boot</description>

<properties>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
</dependencies>

<build>
    <sourceDirectory>/src/main/server</sourceDirectory>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <mainClass>com.project.server.Main</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

gitlab-ci.yml

image: maven:latest

cache:
   paths:
      - .m2/repository/

build:
   stage: build
   script:
      - mvn compile

test:
   stage: test
   script:
      - mvn test

deploy:
   stage: deploy
   artifacts:
      expire_in: 1 month
   paths:
      - target/*.jar
   script:
      - mvn clean package -B
      - ls target/classes/

【问题讨论】:

你的java类在哪里?我希望在src/main/java+ 包名?为什么需要&lt;sourceDirectory&gt;/src/main/server&lt;/sourceDirectory&gt;?故意的? @khmarbaise ,具有主要功能的文件的完整路径是 src\main\server\com\project\server\Main.javasourceDirectory 只是解决问题的众多尝试之一 【参考方案1】:

所以,我解决了。问题是由非标准路径命名引起的。

曾是:src\main\server\com\project\server\Main.java

将文件夹 server 更改为 java 即可解决问题

变成:src\main\java\com\project\server\Main.java

【讨论】:

以上是关于Jar 不包含我的类文件 gitlab-ci的主要内容,如果未能解决你的问题,请参考以下文章

为什么我需要在jar文件中查找未包含在maven pom.xml文件中的类?

如何找到包含类定义的jar文件? [关闭]

如何知道android sdk的哪个jar文件包含我需要的类

如何正确地包含一个科尔多瓦插件的外部 jar 文件?

sbt / maven是否包含jar文件中的完整依赖项?

jar包与aar包文件的区别