This bug cost me hours and it wasn’t even visible. Pushed code that worked perfectly on my machine. CI pipeline failed instantly on Linux. The culprit? Something most developers never notice. We were migrating a Java Spring Boot application to Azure, with a Bitbucket CI/CD pipeline running on Linux. All tests passed locally on Windows. But the pipeline kept failing with this cryptic error: [ERROR] SomeTest.java:[1,1] illegal character: '\ufeff' [ERROR] class, interface, enum, or record expected No logic issue. No syntax error. The problem was UTF-8 with BOM, Windows had added 3 invisible bytes at the start of Java files. The Linux Java compiler doesn’t accept it. Fix: Re-saved files as UTF-8 without BOM -> pipeline turned green. 7 files affected. Hours saved (after hours lost 😄). Cross-platform differences (encoding, line endings, case sensitivity) can silently break CI pipelines. If you code on Windows but build on Linux, check your file encoding. Invisible characters can break very visible things. #Java #CICD #DevOps #SpringBoot #CloudMigration #TIL
UTF-8 BOM breaks Java Spring Boot on Linux CI pipeline
More Relevant Posts
-
Live Java class insights: Mastering Interfaces! 🚀 Deep dive into Java Interfaces today—standardization contracts with public static final vars & abstract methods (those 12 rules!). OS Standardization Demo OperatingSystem interface: boot() & shutdown() implemented across Windows/Mac/Linux—polymorphism in action via objects. Pure standardization win! JDK Evolution Fix Pre-JDK8: Adding methods broke everything. JDK8+ solution: Default methods: Concrete, inheritable (e.g., installApps() w/ internet/storage checks) Static methods: Interface.call() utilities Private methods (JDK9): Internal reuse Private static: Shared static logic @FunctionalInterface enforces single abstract method. Backward compatibility nailed! Key Takeaway From empty marker interfaces (Serializable) to concrete power—Interfaces evolved for real-world scaling. Next: Exceptions & Multithreading. Practice those assignments! What's your go-to interface use case? #Java #JDK8 #Interfaces #Programming #LearningUpdate TAP Academy
To view or add a comment, sign in
-
-
The Ultimate SQL Cheat Sheet From Beginner → Intermediate → Advanced 🔹 Beginner: SELECT, WHERE, ORDER BY 🔹 Intermediate: JOIN, GROUP BY, HAVING 🔹 Advanced: CTEs, Window Functions, Optimization SQL can literally change your salary. #Git #Command #Github #Linux #Programming #Developer #Beginner #Advanced #JavaScript #Coding #DevOps #Workflow w3schools.com JavaScript Mastery GitHub
To view or add a comment, sign in
-
-
Built FluxMon, a Linux process monitor written in Java from scratch. No libraries. No frameworks. Just raw /proc. What it does: → Reads per-process CPU, memory, and user data directly from the Linux kernel interfaces (/proc filesystem) — the same source htop uses → Renders a real-time TUI using ANSI escape codes and alternate screen buffer → Spring Boot REST API exposes live process data as JSON — GET /api/processes, /api/processes/top → Raw HTTP/1.1 server built from scratch using Java sockets — zero frameworks And the next step A web dashboard where you can monitor your own Linux machine's resources in real time — directly from the browser. The whole project goes from kernel interfaces → HTTP protocol → REST API → browser. Every layer built manually. GitHub: https://lnkd.in/dQf7b3gB Project structure: FluxMon/ ├── Core → TUI, reads /proc directly ├── API → Spring Boot REST layer └── Dashboard → coming soon #Java #Linux #SystemsProgramming #OpenSource #SoftwareEngineering
To view or add a comment, sign in
-
-
Bash is the fifth most-used programming language in the world. >49% of developers use it actively -- ahead of TypeScript. And 80% of the Bash code on GitHub is absolute garbage. Not my word: ACM, 2022, 1.35 million scripts analysed. Quoting failures, word-splitting errors, missing error handling. Schoolboy errors across millions of repositories. We are talking about the language that runs on 96.3% of the world's top million web servers. The language in every CI/CD pipeline, every container entrypoint, every deployment workflow. Treated like a weekend hack. See my full rant in first comment -- with the data, the bad tutorials, and some bad language. #Bash #DevOps #ShellScripting #SoftwareEngineering #Linux
To view or add a comment, sign in
-
-
Junrar (Java), Path Traversal (Zip-Slip), CVE-2026-28208 (Moderate) How CVE-2026-28208 Works The vulnerability exists in the `LocalFolderExtractor` component of Junrar, a Java RAR extraction library. It stems from a logical inconsistency between how path validation and file creation handle the backslash (\) character on Linux/Unix systems, allowing a Zip-Slip style attack. 1. Path Validation Bypass: The `createFile()` method in `LocalFolderExtractor.java` attempts to prevent path traversal by checking that the canonical path of a new file starts with the canonical path of the extraction directory (...
To view or add a comment, sign in
-
Junrar (Java), Path Traversal (Zip-Slip), CVE-2026-28208 (Moderate) How CVE-2026-28208 Works The vulnerability exists in the `LocalFolderExtractor` component of Junrar, a Java RAR extraction library. It stems from a logical inconsistency between how path validation and file creation handle the backslash (\) character on Linux/Unix systems, allowing a Zip-Slip style attack. 1. Path Validation Bypass: The `createFile()` method in `LocalFolderExtractor.java` attempts to prevent path traversal by checking that the canonical path of a new file starts with the canonical path of the extraction directory (...
To view or add a comment, sign in
-
Java profiling in Coroot now covers memory allocations and lock contention. It requires no code changes, no JVM flags, and works with any HotSpot JVM: https://lnkd.in/eMDFbwvH Enable it with a single environment variable for flamegraphs and time-series metrics. Learn on our blog how to set it up #opensource on your system, how it works, and how it can help diagnose incidents - with examples from intentionally breaking a few things. #observability #monitoring #kubernetes #tech #opensource #ebpf #linux #freesoftware #jvm #tech #AI #sre #devops #sysadmin
To view or add a comment, sign in
-
-
After the fifth httpd deployment, permissions start to blur. You migrate a site or push an update, and suddenly the permissions are a mess. Is it www-data? Is it apache? Is it /var/www or /srv/www? I wrote DistroChown to handle the "Permission Drift" automatically. It reads the distro via /etc/os-release and aligns everything to the correct standards (755/644) for your specific distribution (Debian, Rocky, RHEL, SUSE). You literally clone the script anywhere, and run it. 🛠️ Lightweight. No dependencies. A simple Python script. Check it out on GitHub: https://lnkd.in/ddKMCe8Z #Linux #SysAdmin #Python #Automation #DevOps
To view or add a comment, sign in
-
Most Bash developers work with three I/O channels: stdin, stdout, and stderr. There are more. File descriptors are just integers. Your process starts with 0, 1, and 2 — but you can open additional ones and use them directly. When you do, some surprisingly clean patterns become available. 𝗩𝗲𝗿𝗯𝗼𝘀𝗲 𝗺𝗼𝗱𝗲 𝘄𝗶𝘁𝗵𝗼𝘂𝘁 𝗶𝗳 𝗴𝘂𝗮𝗿𝗱𝘀: open a custom descriptor pointing at /dev/null by default, and at stdout when verbosity is requested. Write all diagnostic output to that descriptor. A single redirect at startup controls everything — no conditional checks scattered through your code. 𝗦𝗮𝘃𝗲 𝗮𝗻𝗱 𝗿𝗲𝘀𝘁𝗼𝗿𝗲 𝗼𝘂𝘁𝗽𝘂𝘁: temporarily redirect stdout inside a function, then restore it cleanly — without spawning a subshell, without losing variable scope, without side effects. 𝗪𝗿𝗶𝘁𝗲 𝘁𝗼 𝘁𝗲𝗿𝗺𝗶𝗻𝗮𝗹 𝗮𝗻𝗱 𝗹𝗼𝗴 𝘀𝗶𝗺𝘂𝗹𝘁𝗮𝗻𝗲𝗼𝘂𝘀𝗹𝘆: redirect stdout through a single exec line at the top of the script. Every subsequent write goes to both destinations automatically. These aren't advanced tricks. They're foundational patterns that appear in well-written production scripts. Once you've used them, you won't go back to workarounds. My latest post covers these patterns in full, with runnable examples for each. Read the full post here: https://lnkd.in/dD3M2KQS #Bash #ShellScript #DevOps #Linux #BestPractices #SysAdmin
To view or add a comment, sign in
-
Jenkins refused to start for 2 days. Here’s every error—and what was really going on: 🔴 *Error 1: AWT is not properly configured* Jenkins 2.479 requires Java 17/21, but my system was still using Java 11. ✔️ Fix: Point Jenkins to Java 21 in /etc/default/jenkins --- 🔴 *Error 2: Silent crash (exit-code 1, no logs)* Jenkins on Java 21 needs --enable-future-java I added it to JAVA_ARGS ❌ (wrong place) ✔️ Fix: Add it to JENKINS_ARGS (after .war) --- 🔴 *Error 3: Port 8080 already in use* Something kept auto-binding to 8080 ✔️ Fix: Switched Jenkins to port 8081 --- 🔴 *Error 4: One invisible mistake* A space inside quotes broke everything: JENKINS_ARGS=" --webroot..." ❌ ✔️ Fix: Remove the space --- 🔴 *Error 5: Config ignored completely* Ubuntu 24.04 ignores /etc/default/jenkins ✔️ Fix: Override systemd service directly: sudo systemctl edit --full jenkins --- 💡 5 errors. 2 days. Real learning. Next post: The final working config + key lessons. #Troubleshooting #Linux #Java #Jenkins #DevOpsJourney
To view or add a comment, sign in
-
Explore related topics
Explore content categories
- Career
- Productivity
- Finance
- Soft Skills & Emotional Intelligence
- Project Management
- Education
- Technology
- Leadership
- Ecommerce
- User Experience
- Recruitment & HR
- Customer Experience
- Real Estate
- Marketing
- Sales
- Retail & Merchandising
- Science
- Supply Chain Management
- Future Of Work
- Consulting
- Writing
- Economics
- Artificial Intelligence
- Employee Experience
- Workplace Trends
- Fundraising
- Networking
- Corporate Social Responsibility
- Negotiation
- Communication
- Engineering
- Hospitality & Tourism
- Business Strategy
- Change Management
- Organizational Culture
- Design
- Innovation
- Event Planning
- Training & Development