问题标签 [appassembler]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
maven - 不要使用 Appassembler 生成 Windows 部分
我只在使用 Appassembler 时针对 Solaris 并在我的 pom 中有这个
但是,仍然会生成一个 bat 文件,并且在生成的 conf 中有一个特定于 Windows 的部分。
两者都不会阻止我运行 - 例如,我可以在使用程序集插件时排除 bat 文件,并且我认为 Windows 部分不会影响我在 Solaris 上的运行。
但是,为了整洁起见,我宁愿一开始都不生成。
有没有办法防止它们产生?
编辑:添加了完整的示例 pom
EDIT2:我认为这是一个错误,所以在这里打开了一个问题
java - 在 shell 启动时向 spring shell 打印消息
我正在使用 spring shell,我想添加一些“正在加载..”消息,所以当用户打开 shell 时,消息将立即显示(在 shell 上)。
我的想法是在批处理文件中添加“ECHO 加载”命令,但我不知道如何将一些打印命令添加到使用 appassembler-maven-plugin创建的批处理文件中。有一种方法可以将此 ECHO 从 pom 添加到批处理文件中吗?
这是我用来在 pom.xml 中创建批处理文件的插件:
有没有办法将 ECHO 命令永久添加到批处理文件中?或者,如果这不起作用,是否有办法将消息打印到 shell,该消息将在 shell 打开到 shell 实际准备好使用的时间之间出现?
maven - appassembler-maven-plugin - 如何在为 Windows 和 Unix 生成脚本时包含本机库文件
您好,正在使用 appassembler-maven-plugin 开发一个内置到分发文件(zip 文件)中的 Java 应用程序。最终用户提取 zip 的内容。
使用这个插件,我们构建了一个分发结构,其中包括所需的 jar 和两个执行脚本(一个用于 unix 的 shell 脚本和一个用于 windows 的批处理脚本)。这些脚本由构建过程自动生成。
pom 文件包含以下内容:
生成的 shell 脚本包含以下对 Java 进行实际调用的行:
批处理脚本包含以下对 Java 进行实际调用的行:
我们现在扩展了 Java 程序,使其使用本地库文件,这些文件包含在分发包中名为“native”的文件夹中(Windows 的 .dll 文件和 unix 环境的 .so 文件包含在本地目录中)
我想编辑构建过程,以便生成的脚本(unix 的 shell 脚本和 windows 的批处理脚本)包含参数“-Djava.library.path=PATH_OF_LIBRARY_FILES”。
我进行了一些搜索,但在 appassembler 插件中找不到任何有关支持此参数的文档。
我试图通过在应用程序 pom 文件中添加“extraJvmArguments”标签并在那里指定“-Djava.library.path”参数来找到一个“hacky”解决方案,但我遇到了路径分隔符在 Windows 和linux(“\”或“/”)。我还考虑过使用“extraJvmArguments”并使用系统变量来指定目录的路径(必须由用户定义),但是这种方法也存在平台问题,因为在 linux 上使用 $VARIABLE_NAME 引用了系统变量,但在 Windows 上使用 %VARIABLE_NAME%。
我们可以要求最终用户在执行之前自己编辑执行脚本,但如果该过程是自动的,并且对最终用户完全透明,那就更好了。这样,最终用户甚至不会知道他们正在运行一个使用 JNI 调用本机库的 Java 应用程序。
我不知道任何平台中立的解决方案。appassembler 是否已经支持此要求?或者应该如何处理?
java - 本地运行时的 Appassembler `run.as.user.envvar`
我正在使用appassembler
插件成功生成我的应用程序结构。因为我的应用程序是从init.d
脚本启动的,所以我修改了配置,所以应用程序运行在serveruser
而不是root
:
这在部署到服务器时工作正常,但我希望能够在运行后在本地运行应用程序mvn clean package
。在这种情况下,它会尝试su
(切换用户)到serveruser
我的本地机器上不存在的用户。有没有围绕这个的最佳实践?
最终目标是能够:
- 在本地构建并通过生成的脚本运行
- 打包相同的生成项目结构部署它并从那里运行
maven - 如何使用 Appassembler maven 插件在程序集中包含工作区工件?
我在我的开发环境中使用 Eclipse m2e,并且我有一个 spring-boot maven 项目(在这种情况下可以被视为具有可运行主类的标准 maven jar 项目),它依赖于同一工作区中的另一个 maven 项目(工作区神器,我们称之为moduleB,spring-boot项目的兄弟),当我运行maven目标时clean package
(appassembler:assemble
目标可以省略,因为我配置了插件的执行部分,见下面的配置细节),生成的程序集在目标目录看起来不错,只是 repo 中缺少 moduleB 的 jar。根据日志,该插件似乎正在尝试复制moduleB中的类文件夹下的每个文件:
如何解决这个问题?在运行 assemble 之前,我是否必须将 moduleB 安装到 maven 本地存储库中?有什么办法可以绕过这一步,因为我不想用不稳定的工件弄乱存储库。
插件的PS配置:
更新#1:
我绕过了这个spring-boot:repackage
目标,因为它将所有东西都封装在一个 jar 中,包括我希望在生产环境中方便地编辑的配置文件。这是我之前提出的问题:Alternatives to Distribution spring-boot application using maven (other than spring-boot:repackage)
maven - 是否可以通过 appassembler 插件添加环境变量
是否有可能以某种方式将环境变量添加到生成的脚本中说LD_LIBRARY_PATH=$BASEDIR/native/libs/
。我在文档中没有找到任何东西。也许至少会有一种使用另一个 Maven 插件的“hacky”方式?
java - 通过 appassembler-maven-plugin 生成的脚本无法在 Spring Boot 应用程序中找到主类
我使用 appassembler-maven-plugin 生成的启动脚本有问题。我有一个基本的 spring-boot 应用程序,只有一个类:
和我的 pom.xml
我运行 Maven:mvn package appassembler:assemble
生成了包和脚本,但是当我尝试运行时./target/appassembler/bin/app
,我得到了
错误:无法找到或加载主类 org.home.sziolkow.ScriptDemoApplication
我测试了生成的包,我可以毫无问题地启动应用程序:
maven - shade、proguard 和 appassembler maven 插件的组合
我正在尝试使用 maven 构建和混淆一个多模块项目。我使用 shade 插件创建一个包含我自己的所有类文件(每个模块)的 fat jar,以便我可以使用 proguard-maven-plugin 混淆 fat jar,然后使用 appassembler 插件创建可执行的构建输出。一切正常,除了其他模块依赖项也出现在 appassembler repo 目录中,这是错误的,因为混淆的类已经存在于阴影 jar 中。
我尝试按照提供的方式定义其他模块依赖项,然后添加遮蔽插件的依赖项,但遮蔽插件似乎忽略了它们。
这是 pom.xml 的相关部分:
欢迎任何想法。
java - 执行bat文件时输入行太长的问题
我创建了一个运行 bat 文件的自动化测试。此 abc.bat 是使用应用程序汇编插件生成的。在 bat 文件中,已设置类路径并已执行 Java 命令)。在 Linux 上,它工作正常,但在 Windows 环境下,我收到以下错误:
输入行太长
执行批处理文件的路径是C:\build\work\work1\abc\abc.bat
. 我必须保持这条路,不能减少它喜欢C:\build\abc.bat
。
我正在使用进程生成器来运行这个 abc.bat 文件。
路径 wp 包含 C:\build\work\work1 的路径。(我正在从系统环境变量中获取此路径)。路径exe包含abc\abc.bat的路径
我做了一些研究,发现可以通过更改组策略来解决长路径问题,如下所示:
点击 Windows 键,输入 gpedit.msc 并按 Enter。
导航到本地计算机策略 > 计算机配置 > 管理模板 > 系统 > 文件系统
并启用 win32 长路径。
这对我不起作用。我使用的是 Windows 10 企业版,操作系统版本为 14393.1593。
另一种方法是使用 Subst 命令。手动我可以使用命令提示符映射驱动器,例如:
它工作正常,不存在“输入行太长”的问题。这是克服这个问题的好方法吗?以及如何使用流程构建器自动执行此操作?
java - 让 appassembler-maven-plugin 为相关工件添加源(或找到另一种方法)?
我正在研究如何更轻松地调试 Maven 部署中的问题,而 appassembler-maven-plugin 插件对于创建多 jar 部署非常有用,其中各种 jar 可以放置在名为“repo”的 Maven 存储库文件结构中(与平面目录相反)。通过将部署复制到开发人员机器并告诉 IDE 使用“repo”作为实际(只读/只读)Maven 存储库,这可能使调查问题变得容易!(这可能需要一些 pom.xml 魔法,但我稍后会解决)
现在我认为将部署的确切源作为部署的一部分将是非常有益的,因为它将允许您使用实际代码而不是反汇编字节码。
所以问题是:鉴于我有一个由 appassembler 创建的 Maven 存储库布局的目录,我如何将必要的文件添加到其中的每个 jar(如果存在)使其可用于源(和 javadoc 也是如此,但是不太重要)?