因此,为了解释我的问题,我来自Java后端开发人员的角度,我们使用Maven来构建.我一直致力于测试我们最近开发的服务器端Node项目,但现在我正在继续在我们的前端JavaScript客户端上设置测试.我不是很精通前端开发,这是我第一次涉足这方面.
所有这一切,我想我将使用以下技术堆栈进行前端测试:Eclipse IDE,Maven构建过程,Mocha测试框架,Chai断言框架,Nock HTTP模拟框架,Sinon模拟/间谍/ stubbing框架,Rewire依赖注入框架.一切都应该没问题,因为那是我们用于Node项目的堆栈,我希望尽可能保持前端设置的相似性.
所以,这是我的知识崩溃的地方.我似乎无法理解我们的Node项目和我们的前端JavaScript项目之间的依赖关系管理的差异.我不明白为什么我不会继续使用集成到我们的Maven构建中的NPM来处理依赖项管理和安装.
我看到很多人都在鼓吹Bower,但在查看了它的页面和文档之后,我仍然没有看到NPM不会填充的利基.在浏览器依赖管理的情况下,我看到很多人坚决拒绝NPM; 主要原因是NPM是为服务器端Node项目而设计的,而不是为前端空间设计的.但谁在乎?无论其初始设计的意图如何,如果它做了我需要做的事情,那么它的缺点是什么?
请接近这个"问题",好像我是一个完整的新手.我已经意识到,当我完成这个过程和研究时,我对前端方面的知识非常缺乏.话虽如此,请在答案中尽可能具体和彻底.我很乐意根据需要分享项目配置等,以帮助描绘我所在空间的图片.感谢任何反馈!
我知道有很多类似的帖子,但我没有找到解决方案,其他帖子中提出的建议和解决方案与我所看到的并不相符.
这个场景非常简单:我在Eclipse中有一个项目,当我从该项目签到更改到我们的Subversion服务器(即VisualSVN Server 2.5.3)时,我想要我们的Jenkins持续集成服务器(即Jenkins 1.546) )获取此更改并启动新版本.我不想从詹金斯民意调查.
我一直主要遵循本文中的步骤.这是我的post-commit钩子脚本:
repos = WScript.Arguments.Item(0)
rev = WScript.Arguments.Item(1)
svnlook = WScript.Arguments.Item(2)
jenkins = WScript.Arguments.Item(3)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("C:\Program Files (x86)\VisualSVN Server\log.txt")
objFile.Writeline "repos=" & repos
objFile.Writeline "rev=" & rev
objFile.Writeline "svnlook=" & svnlook
objFile.Writeline "jenkins=" & jenkins
Set shell = WScript.CreateObject("WScript.Shell")
Set uuidExec = shell.Exec(svnlook & " uuid " & repos)
Do Until uuidExec.StdOut.AtEndOfStream
uuid = uuidExec.StdOut.ReadLine()
Loop
objFile.Writeline "uuid=" & uuid
Set changedExec = shell.Exec(svnlook & " changed …Run Code Online (Sandbox Code Playgroud) 我意识到有很多类似的问题,但没有一个能帮我解决这个问题.
我正在使用一个名为Tynamo的CRUD框架,后者又依赖于Apache Tapestry和Hibernate.这一切都很好,除了当我尝试在具有复合/复合主键的表上使用CRUD时.
我决定不去这@EmbeddedId条路,因为它似乎根本不适用于框架.话虽这么说,我一直在使用这种@IdClass方法,主要是工作; 我想我是一两行远离成功的代码.
问题在于,当它开始使用反射来构建对象时,它会爆炸并说org.hibernate.InstantiationException: No default constructor for entity: ...,即使确实有一个公共的空构造函数用于该内部类.
在回答时,请避免使用代码片段,并使用完整的课程等,以便访问此主题的其他人可以更全面地了解正在发生的事情.
你可以在下面看到我的课程:
package com.company.crud.entities;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import com.company.crud.entities.TransferExtension.TransferExtensionPK;
@Entity(name = "Transfer_Extensions")
@IdClass(TransferExtensionPK.class)
public class TransferExtension implements Serializable {
private static final long serialVersionUID = 1L;
@Id
// @NotNull(message = "Please supply a Script Code")
// @Length(min = 3, max = 4)
@Column(name = "Division", nullable = false)
private String scriptCode;
@Id
// @NotNull(message = …Run Code Online (Sandbox Code Playgroud) 我有一个使用 exec-maven-plugin 执行带有三个参数的 shell 脚本的 pom。运行时mvn clean install -X -e,它在该步骤失败并出现错误,
[DEBUG] Toolchains are ignored, 'executable' parameter is set to C:\dev\intellij\projects\project-in-question\driver/src/main/scripts/dependencies.sh
[DEBUG] Executing command line: [C:\dev\intellij\projects\project-in-question\driver\src\main\scripts\dependencies.sh, C:\dev\intellij\projects\project-in-question\driver\target/project-in-question.dependencies, C:\dev\intellij\projects\project-in-question\driver\target, third-parameter]
[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.3.2:exec (dependencies) on project project-in-question: Command execution failed.: Cannot run program "C:\dev\intellij\projects\project-in-question\driver\src\main\scripts\dependencies.sh" (in directory "C:\dev\intellij\projects\project-in-question\driver"): CreateProcess error=193, %1 is not a valid Win32 application -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.3.2:exec (dependencies) on project project-in-question: Command execution failed.
Run Code Online (Sandbox Code Playgroud)
pom.xml 的相关部分:
...
<plugin>
<groupId>org.codehaus.mojo</groupId> …Run Code Online (Sandbox Code Playgroud) 我正在使用Novell.Directory.Ldap用C#编写的Xamarin移动应用程序.
使用Novell,我可以使用域名,用户名和密码对用户进行身份验证
LdapConnection.bind(username, password);
Run Code Online (Sandbox Code Playgroud)
然后,我使用sAMAccountName相当于提供的用户名的搜索执行搜索.
在所有这一切成功运行之后,我需要获取用户,objectGuid以便我可以查询外部数据库,这些数据库使用guid作为密钥.问题是,当我从后面拿回guid时LdapSearchResults,它以某种方式编码.我无法弄清楚如何获得这个guid的可读字符串表示.
有没有人有这方面的更多信息?我会想象guid是以某种方式编码的,但它是如何编码的,我不知道.我试过了
System.Convert.FromBase64String
Run Code Online (Sandbox Code Playgroud)
那并没有帮助.我很感谢帮助人员,如果我能发布任何有用的信息,请告诉我.
private void Login()
{
if (LOG.isInfoEnabled())
{
LOG.info("Attempting LDAP logon . . .");
if (LOG.isDebugEnabled())
{
LOG.debug("Host: " + this.ldapHost);
LOG.debug("Port: " + this.ldapPort);
LOG.debug("SearchBase: " + this.ldapSearchBase);
}
}
LdapConnection conn = new LdapConnection();
try
{
conn.Connect(this.ldapHost, this.ldapPort);
if (LOG.isDebugEnabled())
{
LOG.debug("connected?: " + conn.Connected.ToString());
}
}
catch (Exception e)
{
LOG.error("An exception occurred while attempting to connect to AD server!", e); …Run Code Online (Sandbox Code Playgroud) 我有一个第三方 jar,它是我的项目的依赖项。由于业务限制,我无法访问企业或公司存储库,这绝对是我对此问题的偏好。但不管怎样,这个第三方 jar 是不公开的,所以它被包含在src\main\resources.
这是一个 Maven 项目,因此我将此第三方 jar 列为编译时依赖项,并在我的 pom 中包含一个构建插件,该插件将作为构建过程的一部分将第三方 jar 安装到我的本地存储库;我告诉 Mavenvalidate在构建生命周期的阶段执行这个目标,据我所知,这是在任何其他 Maven 阶段之前。
但是,当我运行 aclean install并清除我的本地存储库时,由于第三方 jar 无法在本地或 Maven 中央存储库中解析,因此构建失败。据我所知,我已经正确设置了 pom,我应该看到 Maven 在开始依赖解析之前尝试在本地安装第三方 jar。
问题是,如果在本地安装 jar 之前列出了依赖项,则构建将由于无法解决该依赖项而失败。如果我删除第三方 jar 声明并运行构建,在发生依赖项解析之后(这是它在清理之后所做的第一件事),但在任何其他阶段之前,它将在本地安装 jar 并且一切正常。但据我所知,它应该validate在收集和解析依赖项之前运行该阶段,因此 jar应该在 Maven 解析之前在本地安装。有什么想法或想法吗?
我的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>
<groupId>com.company</groupId>
<artifactId>project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>Web Services</name>
<description>This project will handle communication.</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<!-- This plugin installs the Evip …Run Code Online (Sandbox Code Playgroud) 我正在尝试运行axis2-ant-plugin-1.6.0.jar\org\apache\axis2\tool\ant\AntCodegenTask用于执行WSDL2Java操作的ant任务.
在ant脚本的顶部,我定义java6.boot.classpath:
<property name="java6.boot.classpath" value="${env.JAVA6_BOOT_CLASSES}"/>
Run Code Online (Sandbox Code Playgroud)
我将JAVA6_BOOT_CLASSES环境变量设置为C:\dev\java\64-bit\jdk-1.6.0_45\bin.
相关的蚂蚁目标如下:
<!-- dist.jar target -->
<target name="dist.jar" depends="generate"
description="Creates the web services client jar file">
<echo>Compiling web services client code</echo>
<javac srcdir="${project.javapath}" destdir="${build}"
source="1.6" target="1.6"
debug="true" debuglevel="lines,vars,source"
excludes="com/company/junit/**"
bootclasspath="${java6.boot.classpath}"
includeantruntime="false">
<classpath refid="compile.classpath" />
</javac>
<echo>Creating ${jarname}.jar</echo>
<jar destfile="${dist}/${jarname}.jar" basedir="${build}" />
<echo>${jarname}.jar created</echo>
</target>
Run Code Online (Sandbox Code Playgroud)
然而,试图运行它,我收到了名义错误:
[javac] warning: [options] bootstrap class path not set in conjunction with -source 1.6
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我觉得我已经为Java 1.6正确设置了启动类路径,但是ant似乎并不同意.
我正在为G1GC调整我们的产品,作为测试的一部分,我在Spark Workers上遇到了常规的段错误,这当然会导致JVM崩溃.发生这种情况时,Spark Worker/Executor JVM会自动重新启动,然后会覆盖为以前的Executor JVM编写的GC日志.
说实话,我不太确定Executor JVM如何重启自己的机制,但是我启动了Spark驱动程序服务init.d,然后调用bash脚本.我在该脚本中使用了一个时间戳,该时间戳附加到GC日志文件名:
today=$(date +%Y%m%dT%H%M%S%3N)
SPARK_HEAP_DUMP="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${SPARK_LOG_HOME}/heapdump_$$_${today}.hprof"
SPARK_GC_LOGS="-Xloggc:${SPARK_LOG_HOME}/gc_${today}.log -XX:LogFile=${SPARK_LOG_HOME}/safepoint_${today}.log"
GC_OPTS="-XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:+PrintFlagsFinal -XX:+PrintJNIGCStalls -XX:+PrintTLAB -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=15 -XX:GCLogFileSize=48M -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy -XX:+PrintHeapAtGC -XX:+PrintGCCause -XX:+PrintReferenceGC -XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1"
Run Code Online (Sandbox Code Playgroud)
我认为问题是这个脚本将这些选项发送到Spark驱动程序,然后Spark驱动程序将它们传递给Spark Executors(通过-Dspark.executor.extraJavaOptions参数),它们都是独立的服务器,当Executor JVM崩溃时,它只是使用命令最初被发送以开始备份,这意味着GC日志文件名的时间戳部分是静态的:
SPARK_STANDALONE_OPTS=`property ${SPARK_APP_CONFIG}/spark.properties "spark-standalone.extra.args"`
SPARK_STANDALONE_OPTS="$SPARK_STANDALONE_OPTS $GC_OPTS $SPARK_GC_LOGS $SPARK_HEAP_DUMP"
exec java ${SPARK_APP_HEAP_DUMP} ${GC_OPTS} ${SPARK_APP_GC_LOGS} \
${DRIVER_JAVA_OPTIONS} \
-Dspark.executor.memory=${EXECUTOR_MEMORY} \
-Dspark.executor.extraJavaOptions="${SPARK_STANDALONE_OPTS}" \
-classpath ${CLASSPATH} \
com.company.spark.Main >> ${SPARK_APP_LOGDIR}/${SPARK_APP_LOGFILE} 2>&1 &
Run Code Online (Sandbox Code Playgroud)
这使我很难调试段错误的原因,因为我正在失去导致JVM崩溃的Workers的活动和状态.有关如何处理这种情况并将GC日志保留在Workers上的任何想法,即使在JVM崩溃/段错误之后?
我正在尝试使用 Java 11 的 java.net.http.HttpClient 从 Http Response 读取分块数据,但我一次只能获取一行。我需要一次获取一整块。
这是我的代码:
final InputStream eventStream;
try {
HttpResponse<InputStream> httpResponse = httpClient.send(HttpRequest
.newBuilder(
new URI(this.config.getEnvironmentAccess().getUrl() + ":<port>/status/?pretty=true"))
.GET().build(), BodyHandlers.ofInputStream());
LOGGER.info("event stream HttpResponse received");
LOGGER.info("statusCode: {}", httpResponse.statusCode());
LOGGER.info("headers: {}", httpResponse.headers());
LOGGER.info("version: {}", httpResponse.version());
LOGGER.info("request: {}", httpResponse.request());
eventStream = httpResponse.body();
} catch (IOException | InterruptedException | URISyntaxException e) {
throw new RuntimeException("Unable to get status event stream", e);
}
BufferedReader br = new BufferedReader(new InputStreamReader(eventStream));
String line = "";
try {
while ((line = br.readLine()) …Run Code Online (Sandbox Code Playgroud) 我正在设置一个负载测试解决方案,正如我一直在阅读JMeter的文档,我看到你可以为测试计划设置许多属性.我已经测试已经运行得很好并产生结果,图表等,但是当我试图更深入地了解JMeter和结果的准确性等时,我遇到了下面的模糊.
从JMeter的文档中,我读到以下内容:
# Whether to use System.nanoTime() - otherwise only use System.currentTimeMillis()
sampleresult.useNanoTime=true
# Use a background thread to calculate the nanoTime offset
# Set this to <= 0 to disable the background thread
sampleresult.nanoThreadSleep=5000
Run Code Online (Sandbox Code Playgroud)
现在,我明白这nanotime将基于一个固定的,但任意的原始时间,而currenttimeinmillis基于系统时间(即挂钟).而且我知道这nanotime会更精确,这就是我对使用它感兴趣的原因:我正在进行负载测试,并且需要响应时间测量尽可能准确和精确.
但我遇到的问题是了解如何使用nanoThreadSleep.纳米级偏移究竟是什么?为什么我想要或不想要后台线程来计算纳米级偏移?如果我启用JMeter使用纳米时间运行会发生什么,但是不要nanoThreadSleep明确使用该设置?
我已经搜索了StackOverflow和Google的某些解释,但除了JMeter的文档在我粘贴的那个小小的模糊中找不到它之外,我找不到其他的.其他人可以帮助我理解这个以及如何正确有效地使用它吗?
java ×6
maven ×2
ant ×1
apache-spark ×1
axis ×1
benchmarking ×1
bower ×1
build ×1
chunked ×1
dependencies ×1
eclipse ×1
encoding ×1
g1gc ×1
hibernate ×1
hudson ×1
java-11 ×1
javac ×1
javascript ×1
jenkins ×1
jmeter ×1
ldap ×1
mobile ×1
nanotime ×1
npm ×1
performance ×1
shell ×1
svn ×1
tapestry ×1
tynamo ×1
windows ×1
xamarin ×1