小编Luk*_*ski的帖子

如何将自定义构建的jar文件注册为maven主要工件?

我有一个项目希望提供一个jar文件:

<packaging>jar</packaging>
Run Code Online (Sandbox Code Playgroud)

但jar是以自定义方式构建的,因此使用jar:jar完成的默认包装已被禁用

<plugin>
  <artifactId>maven-jar-plugin</artifactId>
  <version>2.3.2</version>
  <executions>
    <execution>
      <id>default-jar</id>
      <phase>none</phase>
    </execution>
  </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

但是当我想要应用阴影时:在现有的罐子上涂上阴影我会收到错误

项目主要工件不存在.

我假设maven不知道我的自定义工具创建的.jar文件.如何让它知道,因为antrun attachArtifact不起作用

<attachartifact file="./bin/classes.jar" classifier="" type="jar"/>
Run Code Online (Sandbox Code Playgroud)

我得到的错误是

发生了Ant BuildException:org.apache.maven.artifact.InvalidArtifactRTException:对于工件{:jar}:附加工件必须具有与其对应的主工件不同的ID.

所以这不是注册主工件的方法......有没有(没有编写自定义java插件)?

谢谢,卢卡斯

jar maven gmaven-plugin maven-antrun-plugin

11
推荐指数
1
解决办法
5172
查看次数

如何使用端口交互协调渲染(榆木0.17)

我想将Elm与Javascript库集成,以便Elm动态创建"cells"(html div),Javascript将提供其id-s并使用它们来执行自定义操作.我想要的顺序是

  1. Elm创建一个单元格(并指定id)
  2. 带有id的消息被发送到端口
  3. Javascript接收消息并执行其操作

这就是我在开始时实现这一点的方法(完整源代码):

port onCellAdded : CellID -> Cmd msg

update : Msg -> Model -> (Model, Cmd Msg)
update message ({cells} as model) =
  case message of

    Push ->
      let
        uid = List.length cells
      in
      ({ model
        | cells = [uid] ++ cells
      }, onCellAdded uid)
Run Code Online (Sandbox Code Playgroud)

问题是Javascript在另一边

var container = document.getElementById('app');
var demoApp = Elm.RenderDemo.embed(container);

demoApp.ports.onCellAdded.subscribe(function(cellID) {
   if(document.getElementById('cell:' + cellID) === null) { window.alert("Cannot find cell " + cellID) }    
});
Run Code Online (Sandbox Code Playgroud)

抱怨说找不到这样的身份证.显然,该视图尚未呈现.

所以我OnCellAdded …

elm

8
推荐指数
3
解决办法
1266
查看次数

通过端口将多个参数传递给Javascript

我需要将一些参数传递给Javascript,但由于一个奇怪的原因它不能编译.我开始时:

port check : String -> Cmd msg
Run Code Online (Sandbox Code Playgroud)

这很好(直接来自JavaScript Interop).但是当我添加另一个参数时

port check : Int -> String -> Cmd msg
Run Code Online (Sandbox Code Playgroud)

我正进入(状态

1 | 端口检查:Int - > String - > Cmd msg
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

你说它应该是:

Int -> String -> Platform.Cmd.Cmd msg
Run Code Online (Sandbox Code Playgroud)

但您需要使用此处描述的特定格式:http: //guide.elm-lang.org/effect_managers/

我只是通过减少一个参数来解决这个问题

type alias Bundle = (Int, String)
port check : Bundle -> Cmd msg
Run Code Online (Sandbox Code Playgroud)

但如果我能这么做的话会更清洁

app.ports.check.subscribe(function(arg1, arg2) {
});
Run Code Online (Sandbox Code Playgroud)

为什么不编译?

elm

8
推荐指数
2
解决办法
1510
查看次数

如何继承多模块Maven项目及其所有好处?

我无法找到一个好的,可扩展的解决方案的问题:

我有一个项目,可以提供给定工件的多种风格.这已被设置为多模块项目,目前有3个模块:

  • / flavour1_module
  • / flavour2_module
  • / flavour3_module

问题是我还有另外50个需要以相同方式设置的项目,即提供3种口味.

解决方案:

  1. 将已创建的多模块项目转换为所有其他50个项目的父项目
    • 缺点:它不起作用.与父模块一起保存的指令不会被继承,因此不会执行它们.
  2. 使用maven-archetype-plugin创建一个多模块项目模板,然后根据模板创建所有50个项目
    • 缺点:如果我需要flavour4,我需要手动更新所有50个项目以添加flavour4_module(并复制其内容).不可扩展.
  3. 将所有flavor的配置嵌入到单个pom中,并根据配置文件启用或禁用它们(即通过配置文件使用组合而不是通过模块继承).然后将50个项目指向它,作为它们的父项.这将创建"内联"模块
    • 缺点:我需要在我自己的机制上实现,这些机制由开箱即用的模块提供.(例如,在单独的目录中构建每个风味).我也会失去模块提供的明确分离.

任何想法如何做得很好?还有其他选择吗?

谢谢,卢卡斯

编辑:

另一个选择是使用reactor扩展maven-reactor-plugin :inject-modules目标,它将从外部工件下载模块定义,并将其定义附加为普通模块.这将动态创建一个新模块.然后所有50个项目都可以使这个pom.xml成为他们的父项.

配置看起来像这样(草稿):

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-reactor-plugin</artifactId>
  <version>1.0</version>
  <executions>
    <execution>
      <id>inject</id>
      <phase>initialize</phase>
      <goals>
        <goal>inject-modules</goal>
      </goals>
      <configuration>
        <modules>
          <module>
            <artifactId>flavour1_module</artifactId>
            <groupId>[ groupId ]</groupId>
            <version>[ version ]</version>
          </module>
          <module>
            <artifactId>flavour2_module</artifactId>
            <groupId>[ groupId ]</groupId>
            <version>[ version ]</version>
          </module>
          <module>
            <artifactId>flavour3_module</artifactId>
            <groupId>[ groupId ]</groupId>
            <version>[ version ]</version>
          </module>
        </modules>
      </configuration>
    </execution>
  </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

这样做会有意义吗?

更新: …

pom.xml maven multi-module

7
推荐指数
1
解决办法
2646
查看次数

使用maven发布过程跨平台同步工件版本

我有一个应该为几个目标平台构建的工件:

  • Linux x86
  • Windows x86
  • ARM11

不幸的是,由于缺少交叉编译器,不可能一次创建所有版本的工件.

换句话说,目标是在存储库中有这样的东西

  • artifact-1.0.0-linux.zip
  • artifact-1.0.0-windows.zip
  • artifact-1.0.0-arm11.zip
  • artifact-1.0.1-linux.zip
  • artifact-1.0.1-windows.zip
  • artifact-1.0.1-arm11.zip
  • ...

请注意,版本是同步的.怎么做到这一点?

问题是发布过程会在每次构建后升级pom.xml的版本.因此,通过在各种平台上连续构建,我可以实现

  • artifact-1.0.0-linux.zip
  • artifact-1.0.1-windows.zip
  • artifact-1.0.2-arm11.zip
  • artifact-1.0.3-linux.zip
  • artifact-1.0.4-windows.zip
  • artifact-1.0.5-arm11.zip
  • ...

但这不是我要找的.

我可以

  1. 在Linux上运行

    mvn release:prepare release:perform -DpushChanges = false

    (将pushChanges设置为false发布不会增加SCM中的版本号)

  2. 然后在Windows上运行

    mvn release:准备发布:执行

    (这会增加版本号)

但是,我有责任以适当的顺序在各种平台上触发发布流程.有没有办法maven可以帮助我这个?

你有什么建议吗?

谢谢


PS.请注意,这不是关于如何组织模块的问题.它是关于如何在多个平台上同步单个工件的发布过程.

multiplatform maven maven-release-plugin

5
推荐指数
1
解决办法
489
查看次数

冻结对maven版本的传递依赖性,以使构建完全可重现

与基本maven概念相关的问题:

一旦发布,我希望保证项目构建完全可重现.因此,所有项目和插件依赖项(包括可传递的依赖项)应始终以相同的方式解析.

不幸的是,如果依赖关系以版本范围表示,则情况并非如此.即使设置了项目的直接依赖关系(使用版本:use-releases),也可能发生传递依赖关系仍然可以在将来以其他方式解决.

如何解决这个问题?有没有已知的解决方案?

我在思考(只是一个想法),关于创建一个插件,在发布时将把项目的所有依赖项转储到一个单独的文件,然后在将来构建之后,从文件读取的依赖项将优先于标准maven用来解决依赖关系的方式.但我担心没有插件api.所以它需要一些黑客攻击,我想避免.还有另外一种方法吗?

谢谢,卢卡斯

dependencies release maven maven-release-plugin transitive-dependency

5
推荐指数
1
解决办法
504
查看次数

强制 OrbitControls 在移动对象周围导航(几乎可以工作)

我正在学习 Three.js 并且我正在玩太阳系模型以了解它是如何工作的。所以我有一个场景,其中地球围绕太阳旋转,月球围绕地球旋转。

现在我想专注于月球并使用控件围绕它旋转(同时让它始终位于屏幕中央)。OrbitControls 似乎是理想的选择,但我无法让它们与移动的月亮一起工作。

这是我的 3 次尝试(请忽略地球和月球是立方体)。

尝试 1 - 放置相机(jsfiddle

首先,我创建了一个场景,其中camera是月球的孩子(没有 OrbitControls)。

moon.add(camera);
camera.lookAt(0, 0, 0);
Run Code Online (Sandbox Code Playgroud)

moon.add(camera);
camera.lookAt(0, 0, 0);
Run Code Online (Sandbox Code Playgroud)
var camera, controls, scene, renderer, labelRenderer;
var solarPlane, earth, moon;
var angle = 0;

function buildScene() {
  scene = new THREE.Scene();
  solarPlane = createSolarPlane();
  earth = createBody("Earth");
  moon = createBody("Moon");

  scene.add(solarPlane);
  solarPlane.add(earth);
  earth.add(moon);

  moon.add(camera);
}

init();
animate();

function init() {

  renderer = new THREE.WebGLRenderer({
    antialias: false
  });
  renderer.setPixelRatio(window.devicePixelRatio);
  renderer.setSize(window.innerWidth, window.innerHeight);
  document.body.appendChild(renderer.domElement);

  labelRenderer = new …
Run Code Online (Sandbox Code Playgroud)

three.js

4
推荐指数
1
解决办法
2227
查看次数