【问题标题】:Sample java project that produce artifacts when build with teamcity使用 teamcity 构建时生成工件的示例 java 项目
【发布时间】:2018-10-10 22:25:05
【问题描述】:

我不了解 java,但尝试使用 teamcity 为 CI/CD 测试 java 项目,我无法触发构建以生成 artifacts 的问题,这对于部署另一个构建配置至关重要。

那么有人可以提供一个示例 java 项目,在使用 teamcity 构建时可以生成 artifacts 吗?

编辑:更多细节如下:

项目树:

    └───src
        └───main
            └───java
                └───com
                    └───mycompany
                        └──app

最后一个文件夹app包含一个名为App.java的文件,内容如下:

package com.mycompany.app;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );

        System.out.println("A NullPointerException is a drag...");
        Object myObject = null;
        /**
         * Checker prevents this from compiling...
         */
//        System.out.println("myObject: " + myObject.toString());
        /**
         * ... which is simply fantastic. It shows:
         *
         * error: [dereference.of.nullable] dereference of possibly-null
         * reference myObject
         *
         * http://checkerframework.org
         */
        System.out.println("... but thankfully, Checker has our back: http://checkerframework.org");
    }

我正在尝试构建 hello 世界项目,从互联网复制,我无法验证此源代码及其工作原理。

maven 的pom.xmlsrc 在同一文件夹中构建:

<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>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>my-app</name>
  <url>http://maven.apache.org</url>

  <properties>
      <!-- This property will be set by the Maven Dependency plugin -->
      <annotatedJdk>${org.checkerframework:jdk8:jar}</annotatedJdk>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.checkerframework</groupId>
        <artifactId>checker</artifactId>
        <version>1.9.4</version>
    </dependency>
    <dependency>
        <groupId>org.checkerframework</groupId>
        <artifactId>checker-qual</artifactId>
        <version>1.9.4</version>
    </dependency>
    <dependency>
        <groupId>org.checkerframework</groupId>
        <artifactId>jdk8</artifactId>
        <version>1.9.4</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
    <executions>
      <execution>
        <goals>
          <goal>java</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <mainClass>com.mycompany.app.App</mainClass>
      <arguments>
        <argument>argument1</argument>
      </arguments>
    </configuration>
      </plugin>
      <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.1</version>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
        <configuration>
          <transformers>
        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
          <mainClass>com.mycompany.app.App</mainClass>
        </transformer>
          </transformers>
        </configuration>
      </execution>
    </executions>
      </plugin>
      <plugin>
          <!-- This plugin will set the properties values using dependency information -->
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.3</version>
          <executions>
              <execution>
                  <goals>
                      <goal>properties</goal>
                  </goals>
              </execution>
          </executions>
      </plugin>
      <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
              <source>1.8</source>
              <target>1.8</target>
              <fork>true</fork>
              <!-- Add all the checkers you want to enable here -->
              <annotationProcessors>
                  <annotationProcessor>org.checkerframework.checker.nullness.NullnessChecker</annotationProcessor>
              </annotationProcessors>
              <compilerArgs>
                  <!-- location of the annotated JDK, which comes from a Maven dependency -->
                  <arg>-Xbootclasspath/p:${annotatedJdk}</arg>
              </compilerArgs>
          </configuration>
      </plugin>
    </plugins>
  </build>
</project>

当我在本地git服务器下添加这个项目,并将它推送到teamcity(在源代码中添加一些空格)以触发构建时,build step来自auto-detected构建配置功能maven构建步骤(我选择maven 添加新构建步骤时)

编辑2:当我在teamcity上触发运行构建时,构建成功但artifacts被隐藏,我需要在构建这个项目后,它在artifacts中生成.jar or .war包。

编辑 3:在 artifacts 中有或没有 **/*.jar,运行构建不会产生 .jar 工件,下面是配置:

感谢您的帮助。我卡了几天了。

【问题讨论】:

  • 你的问题太宽泛了。请提供详细信息。 java 项目的build 怎么样? “我无法触发构建”是什么意思?也许你不知道如何构建它?
  • 我会在一分钟内更新#1。

标签: java teamcity


【解决方案1】:

您需要告诉 Team City 构建工件的位置。在构建配置中有一个字段 (Arifact Paths) 将采用 ant 表示法。例如显示所有 jar/war 文件。

**/*.war
**/*.jar

这将扫描整个项目以查找 war 或 jar 文件。这些通常放在 maven 用于构建源代码的 /target 文件夹中。

【讨论】:

  • 谢谢,但是如何在 teamcity web ui 的artifacts 标签中添加*.jar 文件?我有另一个构建配置,它将检查先前构建的构建成功状态及其artifacts
  • 因此,如果您有另一个使用此配置的构建配置,则需要将其设置为依赖项。您可以声明它依赖于人工制品,并使用与上述相同的规则。将之前的构建配置设置为构建触发器也是一个好主意。
  • 绝对以后的构建将在先前构建成功时触发并寻找.jar 包做其他事情,所以我必须把相同的**/*.jar 放在以后构建寻找@ 987654328@ 在上一个文件夹中。谢谢,我稍后再试,反馈成功与否。
  • 它没有产生.jar 工件,我刚刚用图像更新了#1。
  • 什么 Maven 目标是您的构建服务器在项目上运行。您正在使用 shade 插件,它将在打包阶段为您生成一个胖 jar。您至少需要构建周期才能使用包。你可以运行mvn clean install
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-15
  • 1970-01-01
  • 2014-01-11
  • 2018-06-02
相关资源
最近更新 更多